2014-10-06 3 views
0

C++ 래퍼 모듈을 통해 Ogre3D를 사용하는 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 할 수 있도록 파이썬에 의해 발견된다. Ogre.framework는 MyOgreWrapper.so의 위치를 ​​기준으로 ../Frameworks에 있습니다.

$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가 현재 디렉토리가되도록 Python에서 환경을 설정하는 방법이 있습니까?

(내가 OOre에 대한 경로를 MyOgreWrapper.so와 @loader_path에 대한 몇 가지 다른 의존성으로 바꾸면 그것이 모두 작동한다는 것을 알고 있습니다. 그러나 그것은 상자에서 나오는 방법이 아니며 차라리 가질 필요가 없습니다. do).

+0

[이] (http://stackoverflow.com/questions/4934806/python-how-to-find-scripts-directory)가 당신이 찾고있는 것이라고 생각합니다. – Travis

답변

0

아니요, 실행 파일 내에서 @executable_path을 제어 할 수있는 방법이 없습니다. @executable_path은 동적 로더 인 dyld으로 해결되며로드 된 실행 파일의 경로를 사용합니다. 주어진 실행 파일에 대해 고정되어 있습니다.

또한 변경할 수 있으면 프로세스가로드하려고 시도하는 다른 내용이 손상 될 수 있습니다.

+0

고마워요. Ogre 빌드 스크립트에서 \ @executable_path를 \ @rpath로 변경하여 수정했습니다. 이상한 점은 어제까지 제대로 작동했다는 것입니다. 내가 생각할 수있는 유일한 단점은 CMake를 3.0.2로 업데이트하는 것이었다. – glennr