gpt4 book ai didi

python - 与 distutils 共享库依赖项

转载 作者:IT老高 更新时间:2023-10-28 21:11:24 25 4
gpt4 key购买 nike

我是 distutils 的新手,但我遇到了一个真正让我陷入困境的问题。我正在编译一个需要扩展的包,所以我做了扩展:

    a_module = Extension(
"amodule",
["initmodule.cpp"],
library_dirs=libdirs,
extra_objects = [
"unix/x86_64/lib/liba.so"
"unix/x86_64/lib/lib.so",
"unix/x86_64/lib/libc.so"],
)

然后我运行设置方法:

    setup(name="apackage", version="7.2",
package_dir = {'':instdir+'/a/b/python'},
packages=['apackage','package.tests'],
ext_modules=[hoc_module]
)

包分发正确,我可以“python setup.py install”很好,但是当我尝试导入我的包时出现错误ImportError: liba.so.0: cannot open shared object file: No such file or directory

我意识到当我将 liba.so.0 的位置添加到我的 LD_LIBRARY_PATH 时,程序运行良好。不幸的是,我没有编写这些模块,也没有很好地理解编译。这几天我一直在想办法,但无济于事。

更新:我尝试将 liba.a、libb.a 等文件传递给 extra_objects 但这不起作用,产生以下错误:liba.a: could not read symbols: Bad valuecollect2: ld 返回 1 个退出状态。我要做的是打包一个python模块,该模块需要编译一个库,该库本身依赖于我需要以某种方式包含在包中的其他库。我怀疑我的问题与这个问题非常相似:http://mail.python.org/pipermail/distutils-sig/2009-February/010960.html但是那个没有解决,我想也许是因为它已经有两年了,所以找到了解决方案?

更新 2:现在我已经解决了这个问题:

      data_files=[('/usr/local/lib', glob.glob('unix/x86_64/lib/*'))]

也就是说,我正在将我需要的库复制到/usr/local/lib 中。然而,我对这个解决方案并不十分满意,尤其是因为它要求我的用户具有 root 权限,而且这可能仍然无法在 Redhat 发行版中运行。因此,如果有人可以提出比此修复更好的建议,请告诉我。

最佳答案

您可以让链接器存储路径在输出二进制文件中搜索,这样就不需要 LD_LIBRARY_PATH。一些例子:

# Will link fine but at run-time LD_LIBRARY_PATH would be required
gcc -o blah blah.o -lpcap -L/opt/csw/lib

# Without LD_LIBRARY_PATH=/opt/csw/lib it will fail to link, but
# it wouldn't be needed at run-time
gcc -o blah blah.o -lpcap -Wl,-R/opt/csw/lib

# LD_LIBRARY_PATH not needed at link or run-time
gcc -o blah blah.o -lpcap -Wl,-{L,R}/opt/csw/lib

# This makes it possible to use relative paths; run `readelf -d binary_name`
# and you'll see '$ORIGIN/../lib/' in RPATH. This plus `-zorigin` make it look
# relative to the binary for libraries at run-time
gcc -o blah blah.o -lsomelib -L/whatever/path/floats/your/boat -Wl,-R'$ORIGIN/../lib/' -Wl,-zorigin

.. 哪里:

  • -L 给出的路径在链接时使用
  • -R 给出的路径在运行时使用

关于python - 与 distutils 共享库依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9795793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com