Связывание взломано .. что такое -rpath?Mac OS X - PullRequest
5 голосов
/ 12 августа 2010

Итак, я строю проект, и он использует функции из скомпилированной библиотеки (.dylib или .so). У меня есть заголовочные файлы и файлы библиотеки (это все часть QtRoot, кстати) в соответствующих местах, но когда я пытаюсь построить свой проект в XCode, я получаю ошибку отладчика:

dyld: библиотека не загружена: @ rpath / libRIO.so Ссылка на: / Пользователи / paulthompson / Документы / Программирование / Сборка продуктов / Отладка / MacHeliosSim.app / Содержание / MacOS / MacHeliosSim Причина: изображение не найдено sharedlibrary apply-load-rules все Форматирование данных временно недоступно, повторная попытка после «продолжения». (В настоящее время не удается вызвать загрузчик, он заблокирован.)

Теперь, сама программа, которая построена, будет работать нормально, если я открою ее из Finder, но всякий раз, когда я пытаюсь запустить ее из Xcode, она раздражает меня. Что это за штука rpath и почему отладчик не может найти библиотеки, хотя сам Xcode знает, где они находятся, и, очевидно, программа, запущенная из Finder, тоже может их найти?

Ответы [ 2 ]

3 голосов
/ 12 августа 2010

http://en.wikipedia.org/wiki/Rpath_(linking)

Это путь, сохраненный в двоичном файле для поиска общих библиотек. Когда вы запускаете приложение из Finder, это, вероятно, пакет приложений? Когда пакеты приложений создаются, общие библиотеки копируются в пакет приложений, и пути к связанным библиотекам становятся относительными. (@Executable_path /../ Каркасы / Foobar). Как вы создали версию, которая работает из Finder?

Произошла ли вышеуказанная ошибка во время компоновки или при запуске приложения из xcode? (В последнем случае попробуйте с DYLD_LIBRARY_PATH)

Кроме того, расширение .so для libRIO вместо .dylib выглядит несколько подозрительно.

2 голосов
/ 26 января 2012

Добавьте rpath в фазе связывания, как в этом примере (в qt creator):

LIBS + = -L / usr / local / root / lib. -Wl, -rpath, / usr / local / root / lib -lm -ldl

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...