Я хочу создать библиотеку в Mac OS X El Capitan (10.11.x) и использовать ее в другом приложении с помощью qt creator, поэтому я создал простую библиотеку в qt с этимпуть библиотеки dylib и использовать его в приложении
QT -= gui
TARGET = /System/Library/Frameworks/MyFrm.framework/dylib/DynminLinkingLib
TEMPLATE = lib
Как вы можете видеть, я создал библиотеку «DynminLinkingLib» в рамках MyFrm; после этого я создал приложение Qt для использования библиотеки.
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = SampleProject
TEMPLATE = app
macx: LIBS += -L/System/Library/Frameworks/MyFrm.framework/dylib -lDynminLinkingLib.1.0.0
INCLUDEPATH += /System/Library/Frameworks/MyFrm.framework/include
Когда я запускаю мое приложение в Qt, это дает мне эту ошибку:
dyld: Library not loaded: libDynminLinkingLib.1.dylib
Referenced from: /Users/mac/Src/dll/DynamicLinking/build-SampleProject-Desktop_Qt_5_5_0_clang_64bit-Debug/SampleProject.app/Contents/MacOS/SampleProject
Reason: image not found
The program has unexpectedly finished.
Для решения этой ошибки в проектах Qt, я поставил DYLD_LIBRARY_PATH
переменную /System/Library/Frameworks/MyFrm.framework/dylib
и она работает хорошо, но когда я запустить пакет приложения он не работает и дает мне эту ошибку:
Это происходит из-за «libDynminLinkin gLib.1.dylib "не находится в пути приложения.
otool -D /System/Library/Frameworks/MyFrm.framework/dylib/libDynminLinkingLib.1.0.0.dylib
libDynminLinkingLib.1.dylib
У меня есть два вопроса:
Я знаю, как решить эту проблему за счет
install_name_tool
но я хочу решить эту проблему в QMAKE и .pro файл. Итак, как я могу решить эту проблему с помощью файла pro config?В Эль Капитане я не могу использовать
DYLD_LIBRARY_PATH
по соображениям безопасности. Чтобы использовать его, я должен деактивировать SIP (защита целостности системы). Так можно ли использовать DYLD_LIBRARY_PATH без деактивации SIP?
* «Я знаю, как настроить эту проблему, но install_name_tool» * - install_name_tool правильный метод для решения этой проблемы. Я не думаю, что вы можете сделать это через Qt Creator или в .pro – TheDarkKnight
Директива LIBS + = -L path -l filename может дать проблемы с версией. Используйте первый LIBS + =/absolute-path-to-my-dylib. Не используйте символические ссылки, а только физическое местоположение. При необходимости переименуйте. После этого вы можете использовать директиву -L -l – adlag