* .so文件如何工作,以及它们在UNIX中的位置?

时间:2012-03-03 00:48:51

标签: python linker cx-freeze

我最近为了内部分发而将python脚本“编译”成二进制形式。我正在使用实用程序cx_freeze,它在默认状态下创建一个包含主二进制可执行文件的目录以及一堆二进制* .so文件。我的理解是.so文件是库,它们显然是使可执行二进制文件起作用所必需的,但我的问题是如何将各种东西链接在一起以便它们不必都在同一目录中?我是否必须在“编译时”确定?是否有一个通用路径变量,可执行文件将查找它可能需要的库,或者该路径是否在可执行文件本身的某处说明了?

提前致谢!

1 个答案:

答案 0 :(得分:4)

动态链接器在多个位置搜索共享对象,如动态链接器的linuxOSX联机帮助页中所述:

  1. DT_RPATH属性存储在ELF文件的二进制文件中。
  2. LD_LIBRARY_PATH环境变量,如果可执行文件不是set-user-id / set-group-id。
  3. DT_RUNPATH属性存储在ELF文件的二进制文件中。
  4. /etc/ld.so.cache文件,用作动态链接器的库路径缓存。
  5. 最后,默认目录为/lib/usr/lib