2014-10-06 2 views
0

У меня есть приложение, написанное на Python, которое использует Ogre3D через модуль оболочки C++. При попытке запуска моего приложения,Могу ли я установить @executable_path из Python

python /path/to/myapp.py 

Я получаю ошибку

dlopen (./ MyOgreWrapper.so, 2): Библиотека не загружен: @executable_path /../ Каркасы/Ogre.framework /Versions/1.9.0/Ogre Реферировано от: /path/to/MyOgreWrapper.so Причина: изображение не найдено

Я бегу из каталога, где 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 так, чтобы @executable_path был текущим каталогом?

(Я знаю, что все это сработает, если я изменю путь для Ogre в MyOgreWrapper.so и еще несколько зависимостей от @loader_path, но это не то, как это получается из коробки, и я бы предпочел не иметь сделайте это.)

+0

Я думаю, что [это] (http://stackoverflow.com/questions/4934806/python-how-to-find-scripts-directory) - это то, что вы ищете. – Travis

ответ

0

Нет, нет возможности контролировать @executable_path из исполняемого файла. @executable_path разрешен dyld, динамическим загрузчиком, и он использует путь к исполняемому файлу, который он загрузил. Он исправлен для любого исполняемого файла.

Кроме того, если вы можете его изменить, это может сломать другие вещи, которые процесс пытается загрузить.

+0

Спасибо за это. Я исправил это, изменив \ @executable_path на \ @rpath в сценариях сборки Ogre. Странно, что он работал до вчерашнего дня. Единственное, что я могу думать о том, что, возможно, сломал, это обновление CMake до 3.0.2. – glennr