2017-01-25 10 views
0

동적으로 B.so를로드하는 실행 파일 A가 있습니다.이 실행 파일은 C.so에 의존합니다. C.so가 A와 B와 같은 폴더에 있지 않습니다.QLibrary는 -rpath로로드합니다.

QLibrary.load()를 사용하여 B.so를로드하려고하는데 QLibrary.errorString()이 라이브러리 C.so를 반환 할 때 그렇게하지 않습니다. 적재되다.

QLibrary 설명서에 LD_LIBRARY_PATH를 사용할 수 있다고 나와 있지만이 작업을 수행하지 않는 것이 좋습니다. B.so를 연결할 때 -Wl, -rpath,/path/to/C /를 사용하고 있지만 동적로드에 도움이되지 않습니다.

LD_LIBRARY_PATH를 사용하지 않고 B.so를로드하는 방법에 대한 제안 사항이 있습니까? -rpath와 함께 작동시킬 수 있습니까?

답변

0

RPATH는 문제가 RPATH 실제로 수정되지 않는 것을이었다 -Wl,-rpath,/path/to/ 대신

+0

나는 질문에 실수를했다. rpath는 디렉토리를 가리키며 .so 파일은 절대 경로로 링커에 제공됩니다. –

0

-Wl,-rpath,/path/to/C.so의 시도, 오브젝트 파일을 공유하지 디렉토리를 가리켜 야합니다.

나는 ldd를 사용하여 공유 객체 파일이 실제로로드되고 있는지 확인했습니다. 그런 다음 readelf -b를 사용하여 RPATH가 올바르지 않은 것으로 나타났습니다.