Связывание взломано.. что такое -rpath? MacOS X
Итак, я строю проект, и он использует функции из скомпилированной библиотеки (.dylib или.so). У меня есть заголовочные файлы и файлы библиотеки (это все часть QtRoot, кстати) в соответствующих местах, но когда я пытаюсь построить свой проект в XCode, я получаю ошибку отладчика:
dyld: библиотека не загружена: @rpath/libRIO.so Ссылка на: /Users/paulthompson/Documents/Programming/Build Products/Debug/MacHeliosSim.app/Contents/MacOS/MacHeliosSim Причина: изображение не найдено sharedlibrary apply-load-rules all Форматеры данных временно недоступны, будут повторяться после "продолжить". (В настоящее время не удается вызвать загрузчик, он заблокирован.)
Теперь, сама программа, которая построена, будет работать нормально, если я открою ее из Finder, но всякий раз, когда я пытаюсь запустить ее из Xcode, она раздражает меня. Что это за штука rpath и почему отладчик не может найти библиотеки, даже если сам Xcode знает, где они находятся, и, очевидно, программа, запущенная из Finder, тоже может их найти?
2 ответа
http://en.wikipedia.org/wiki/Rpath_%28linking%29
Это путь, сохраненный в двоичном файле для поиска общих библиотек. Когда вы запускаете приложение из Finder, это, вероятно, пакет приложений? Когда пакеты приложений создаются, общие библиотеки копируются в пакет приложений, и пути к связанным библиотекам становятся относительными. (@Executable_path/../ Каркасы / Foobar). Как вы создали версию, которая работает из Finder?
Возникает ли ошибка выше во время компоновки или при запуске приложения из xcode? (В последнем случае попробуйте с DYLD_LIBRARY_PATH)
Кроме того, расширение.so для libRIO вместо.dylib выглядит несколько подозрительно.
Добавьте rpath на этапе компоновки, как в этом примере (в qt creator):
LIBS + = -L / usr / local / root / lib -lGui -lCore -lCint -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lTree -lRint -lPostscript -lMatrix -lPhysics -lMathCore -lThread -lpthread -Wl -rpath, /usr/local/root/lib -lm -ldl