我在 Ubuntu 23.04 上构建了一个可执行文件(mybin.out),并将其及其所有依赖项(共享库)放在一个文件夹中(文件夹名称=execfolder)。我将该文件夹复制到另一台 Linux 计算机(Ubuntu 20.04)。我尝试通过
LD_LIBRARY_PATH=/path/to/execfolder/ ./path/to/execfolder/mybin.out
运行可执行文件,但我得到的只是Segmentation fault (core dumped)
。我希望通过运行 mybin.out
来获取 LD_LIBRARY_PATH=/path/to/execfolder/ ldd ./path/to/execfolder/mybin.out
尝试使用的共享库列表。但我又得到了Segmentation fault (core dumped)
可执行文件 (mybin.out) 在我的 Ubuntu 23.04 上完美运行,并且它使用与它自己的目录相同的共享库。
当 Ubuntu 20.04 拥有所需的所有共享库时,为什么我无法在 Ubuntu 20.04 上运行相同的可执行文件?
为什么
ldd
会回来Segmentation fault (core dumped)
???
为了在不同平台上运行相同的可执行文件及其库,您需要有一个稳定且未更改的 ABI。通常,在切换到较新的平台时,ABI 会升级,因此,移植为较新平台构建的二进制文件将需要旧平台上可能不存在的东西。
为了在较新的平台上构建并在较旧的平台上交付,您需要针对正确的目标进行编译。核心转储是由于模块的 ABI 不匹配而产生的。
通常,您在每个平台上从源代码进行编译以避免此类问题。但是,如果两个版本之间的 ABI 没有更改,您可以在 Ubuntu 20.04 上构建并在 Ubuntu 23.04 上复制它。请记住,Ubuntu 23.04 不是 LTS,因此兼容性可能会受到限制。