rpath
值设置为存储这些库的文件夹的想法(使用LD_LIBRARY_PATH或LD_PRELOAD不是一个选项)因此,基本上在my setup.py中,我为扩展模块添加了其他链接器选项:
linker_opts = ['-Wl,-rpath=path/to/my/lib']
Extension('python_module', extra_link_args=linker_opts)
由于某种原因,这种方法不起作用,经过一些研究,我发现
在conda环境中-rpath
已设置为类似~/miniconda/envs/dev/lib
的值,因此两次添加此路径不起作用
我用readelf -d somemodule.so
检查了这一点,结果表明,当切换到一个简单的python环境时,这根本不是问题,所以看起来康达在默认情况下以某种方式设置了这个rpath
我查了conda的文件没有发现任何与此相关的信息, 那么,是否有一些简单的方法来禁用此默认rpath值
更新:关于安装,我使用python setup.py install
更新2:
同时我发现这个标志是由distutils生成的 conda环境中的版本。特别是
In [31]: distutils.sysconfig.get_config_vars('LDSHARED')
Out[31]: ['gcc -pthread -shared -B /.../miniconda3/envs/dev /compiler_compat -L/../miniconda3/envs/dev/lib -Wl,-rpath=/./miniconda3/envs/dev/lib -Wl,--no-as-needed -Wl,--sysroot=/']
我只是好奇这是否与不同的distutils版本有关。conda中使用的是3.8.10,如果我使用系统python3.9,则为3.9.5。
似乎还有一个选择是,conda某处导出LD_SHARED
,但我不确定在哪里
目前没有回答
相关问题 更多 >
编程相关推荐