为了内部分发,我最近一直在将 Python 脚本“编译”成二进制形式。我正在使用实用程序 cx_freeze,在默认状态下,它会创建一个目录,其中包含主要的二进制可执行文件以及一堆二进制 *.so 文件。我的理解是 .so 文件是库,它们显然是使可执行二进制文件正常运行所必需的,但我的问题是如何将它们链接在一起,这样它们就不必全部位于同一目录中?我必须在“编译时”确定吗?是否存在可执行文件将查找其可能需要的库的通用路径变量,或者该路径是否在可执行文件本身的某处声明?
提前致谢!
最佳答案
动态链接器会在多个位置搜索共享目标文件,如动态链接器联机帮助页中的 linux 所述。或 OSX :
DT_RPATH
属性存储在 ELF 文件的二进制文件中。LD_LIBRARY_PATH
环境变量,如果可执行文件不是 set-user-id/set-group-id。DT_RUNPATH
属性存储在 ELF 文件的二进制文件中。/etc/ld.so.cache
文件,用作动态链接器的库路径缓存。- 最后,默认目录
/lib
和/usr/lib
。
关于python - *.so 文件如何工作,以及它们在 UNIX 中的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9542357/