2010-08-12 3 views
5

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

dyld: Library not loaded: @rpath/libRIO.so Referenced from: /Users/paulthompson/Documents/Programming/Build Products/Debug/MacHeliosSim.app/Contents/MacOS/MacHeliosSim Reason: image not found sharedlibrary apply-load-rules all Data Formatters temporarily unavailable, will re-try after a 'continue'. (Cannot call into the loader at present, it is locked.)

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

ответ

3

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

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

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

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

+0

Вы пропустили закрывающую скобку по вашей ссылке. –

+0

Правильно, это пакет .app. Тем не менее, ни одна из разделяемых библиотек не находится в нем, если только они не обернуты в фактический двоичный файл. Существует даже не каталог фрейм ... В любом случае .app создается путем создания «build» или «build and go» из Xcode. Ошибка возникает во время перехода «build & go» или если я выбираю запуск из Xcode. Я тоже считаю, что это сим-ссылка на .dylib. Некоторые из файлов библиотеки, с которыми я связываюсь, являются фактическими .so файлами, а другие - .dylib. Я думаю, что есть даже некоторые .a там где-то, но я могу ошибаться. Итак, я пропал без вести – TraxusIV

+0

Скопировать файлы в фазе сборки? – TraxusIV

1

Добавьте 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

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