Связывание поднимается .. Что такое -rpath? Mac OS X
-
27-09-2019 - |
Вопрос
Итак, я строю проект, и он использует функции из сборной библиотеки (.dylib или .so). У меня есть заголовки и файлы библиотеки (это все часть qtroot, BTW) в соответствующих местах, но когда я пытаюсь создать свой проект в Xcode, я получаю ошибку отладчика:
Dyld: Библиотека не загружена: @ rpath / librio.so, на ссылке: / Пользователи / paulthompson / Документы / Программирование / сборки Products / debug / macheliossim.app / Содержание / Macos / Macheliossim. Причина: Изображение не найден. Формат данных данных временно недоступны, повторно попробую после «продолжения». (Не удается позвонить в погрузчик в настоящее время, он заблокирован.)
Теперь сама программа, которая построена, будет работать совсем хорошо, если я открою его от Finder, но всякий раз, когда я стараюсь запустить его из Xcode, он устанавливает на меня. Что такое эта рабовка, и почему отладчик не может найти библиотеки, даже если сам XCode знает, где они есть, и, видимо, программа, когда бегите из искателя тоже могут их найти?
Решение
http://en.wikipedia.org/wiki/rpath_(
Это путь, хранящийся в двоичном виде, чтобы найти общие libs. Когда вы запускаете приложение от Finder, это, вероятно, пакет приложения? Когда создаются пакеты приложений, общие библиотеки копируются в пакет приложения, а пути к вкладу библиотеки становятся относительными. (@executable_Path /../ frameworks / foobar). Как вы создали версию, которая работает от Finder?
Вышеуказано ли ошибка приведена в зависимости от времени или при запуске приложения от Xcode? (В последнем случае попробуйте с dyld_library_path)
Кроме того, расширение .so для Librio вместо .Dylib выглядит немного подозрительно.
Другие советы
Добавьте рапуску в фазу связывания, как в этом (в Qt Creator) Пример:
Libs + = -L / usr / local / root / lib -lgui -lcore -lcint -lrio -lnet -lhist -lgraf -lgraf3d -lgpad -ltree -lrint -lpostscript -ltree -lrint -lpostscript -lmatrix -lphysics -lmathcore -ltread -lpthread -wl -RPath, / usr / local / root / lib -lm -ldl