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

标签 python linker cx-freeze

为了内部分发,我最近一直在将 Python 脚本“编译”成二进制形式。我正在使用实用程序 cx_freeze,在默认状态下,它会创建一个目录,其中包含主要的二进制可执行文件以及一堆二进制 *.so 文件。我的理解是 .so 文件是库,它们显然是使可执行二进制文件正常运行所必需的,但我的问题是如何将它们链接在一起,这样它们就不必全部位于同一目录中?我必须在“编译时”确定吗?是否存在可执行文件将查找其可能需要的库的通用路径变量,或者该路径是否在可执行文件本身的某处声明?

提前致谢!

最佳答案

动态链接器会在多个位置搜索共享目标文件,如动态链接器联机帮助页中的 linux 所述。或 OSX :

  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

关于python - *.so 文件如何工作,以及它们在 UNIX 中的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9542357/

相关文章:

python - 使用 Microsoft Visual Studio 附加到 Linux 进程?

c++ - 避免链接到 libstdc++

带有 cx_freeze TCL_LIBRARY 错误的 Python pygame exe 构建

python - 如何将许可证文本添加到 cx_freeze bdist_msi?

python - Spark中跨分区的Reduce函数 pyspark

Python 2.6 numpy 交互数组对象错误

python - 我可以将 socket.io 与 twisted.web 一起使用吗?

c++ - C/C++ : Taking the address of a function imported from a shared library

linker - "start",引用自 : -u command line option ld: symbol(s) not found

python - SDL/Pygame 无法使用 cx_Freeze 加载 PNG 图像