2014-10-06 108 views
0

我有一個使用Ogre3D通過C++包裝器模塊編寫的Python應用程序。當試圖運行我的應用程序我可以設置Python的@executable_path

python /path/to/myapp.py 

我得到的錯誤

的dlopen(./ MyOgreWrapper.so,2):庫未加載: @executable_path /../框架/ Ogre.framework /path/to/MyOgreWrapper.so原因:/Versions/1.9.0/Ogre 從引用沒有找到圖片

我從那裏MyOgreWrapper.so所在的目錄中運行它,這樣MyOgreWrapper.so能被Python找到。 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的路徑,所有這些都將工作,但這不是它是如何從盒子出來的,我寧願不必)

+0

我認爲[這](http://stackoverflow.com/questions/4934806/python-how-to-find-scripts-directory)是你在找什麼。 – Travis 2014-10-06 23:12:17

回答

0

不,從可執行文件中無法控制@executable_path@executable_path由動態加載程序dyld解決,它使用它加載的可執行文件的路徑。它對任何給定的可執行文件都是固定另外,如果你可以改變它,那可能會破壞進程試圖加載的其他東西。

+0

謝謝。我通過在Ogre構建腳本中將\ @executable_path更改爲\ @rpath來修復它。奇怪的是,它直到昨天才正常工作。我能想到的唯一的事情可能已經打破了它將CMake更新到3.0.2。 – glennr 2014-10-07 02:06:27