2017-01-25 11 views
0

У меня есть исполняемый файл A, который динамически загружает B.so, что, в свою очередь, зависит от C.so. C.so не находится в той же папке, что и A и B.Загрузка QLibrary с -rpath

Я пытаюсь загрузить B.so с помощью QLibrary.load(), но не могу сделать это, поскольку QLibrary.errorString() возвращает библиотеку C.so не может загружаться.

В документации QLibrary указано, что LD_LIBRARY_PATH можно использовать, но я бы предпочел не делать этого. Я использую -Wl, -rpath,/path/to/C/при связывании B.so, но это не помогает для динамической загрузки.

Любые предложения о том, как я могу загрузить B.so, не прибегая к LD_LIBRARY_PATH? Могу ли я работать с -rpath?

ответ

0

RPATH должен указывать на каталог не общий объектный файл, попробуйте -Wl,-rpath,/path/to/ вместо -Wl,-rpath,/path/to/C.so

+0

Я ошибся в вопросе; rpath указывает на каталог, а файл .so передается компоновщику с абсолютным путем. –

0

Проблема в том, что RPATH фактически не изменяется.

Я использовал ldd, чтобы проверить, что файлы общих объектов на самом деле загружаются, а они не были. Затем я использовал readelf -b и обнаружил, что RPATH неверен.

Смежные вопросы