我可以从Python设置@executable_path吗?

时间:2014-10-06 23:08:07

标签: python macos dylib

我有一个用Python编写的应用程序,它通过C ++包装器模块使用Ogre3D。尝试运行我的应用程序时

python /path/to/myapp.py

我收到错误

  

dlopen(./ MyOgreWrapper.so,2):未加载库:   @executable_path /../框架/ Ogre.framework /版本/ 1.9.0 /食人魔   引用自:/ path / to / MyGgreWrapper.so原因:未找到图像

我从MyOgreWrapper.so所在的目录运行它,以便Python可以找到MyOgreWrapper.so。 Ogre.framework位于../Frameworks中,相对于MyOgreWrapper.so的位置。

$otool -l MyOgreWrapper.so
MyOgreWrapper.so:
@rpath/MyOgreWrapper.so (compatibility version 0.0.0, current version 0.0.0)
@executable_path/../Frameworks/Ogre.framework/Versions/1.9.0/Ogre (compatibility version 1.9.0, current version 1.9.0)
...

我怀疑这是因为@executable_path被设置为python可执行文件的路径。

有没有办法从Python设置环境,以便@executable_path是当前目录?

(我知道如果我将MyOgreWrapper.so中的Ogre路径和其他一些依赖项更改为@loader_path,它将全部工作,但这不是它开箱即用的方式,我宁愿没有这样做。)

1 个答案:

答案 0 :(得分:0)

不,无法从可执行文件中控制@executable_path@executable_path由动态加载程序dyld解析,它使用它加载的可执行文件的路径。对于任何给定的可执行文件,它都是固定的。

此外,如果您可以更改它,那可能会破坏该进程尝试加载的其他内容。