Я пытаюсь создать исполняемый файл, который использует Qt в качестве одной из своих зависимостей и gyp в качестве инструмента сборки. Мой проект собирается правильно, но всякий раз, когда я пытаюсь запустить исполняемый файл, я вижу эту ошибку:
dyld: Library not loaded: @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore
Referenced from: /Users/abrarhu/Documents/KRF/build/Pegasus/Pegasus-1.0/RHEL5_64/DEV.STD.PTHREAD/build/bin/mac/./Pegasus
Reason: image not found
Abort trap: 6
Я решил проверить, какие библиотеки используются с помощью otool -L
и это был результат:
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.8)
@executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore (compatibility version 5.4.0, current version 5.4.2)
@executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets (compatibility version 5.4.0, current version 5.4.2)
@executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui (compatibility version 5.4.0, current version 5.4.2)
@executable_path/../Frameworks/QtMacExtras.framework/Versions/5/QtMacExtras (compatibility version 5.4.0, current version 5.4.2)
@executable_path/../Frameworks/QtMultimedia.framework/Versions/5/QtMultimedia (compatibility version 5.4.0, current version 5.4.2)
@executable_path/../Frameworks/QtMultimediaWidgets.framework/Versions/5/QtMultimediaWidgets (compatibility version 5.4.0, current version 5.4.2)
... other stuff
Я пытался с помощью install_name_tool -change
чтобы изменить место нахождения библиотек, но это изменение отменяется, если я очищаю свой проект. Кроме того, это не практично, потому что мне нужно запускать его на всех файлах Qt, которые ссылаются друг на друга (например, QtMacExtras ссылается на QtCore). Вот соответствующие части из моего файла GYP:
'xcode_settings':
{
'VALID_ARCHS': ['i386'],
'GCC_TREAT_WARNINGS_AS_ERRORS' : 'NO',
'FRAMEWORK_SEARCH_PATHS': [ '<(kgyp_repo_dir)/dependency/lib/<(target_os)' ],
}, #xcode_settings
'link_settings':
{
'library_dirs':
[
'<(kgyp_repo_dir)/dependency/lib/<(target_os)',
'<(kgyp_repo_dir)/dependency/lib/<(target_os)/$(CONFIGURATION)',
],
...
libraries : [
'QtCore.framework',
'QtWidgets.framework',
...
]
Я также пытался установить DYLD_LIBRARY_PATH
как путем экспорта, так и путем включения его в мой xcode_settings
и ни один из этих вариантов не сработал.
я видел это сообщение пост, который говорит о том, как сказать dyld
где найти мои библиотеки, но я не думаю, что это сработает (я уверен, что все вещи будут отменены каждый раз, когда я делаю чистку). Я ищу способ, которым я могу решить эту проблему из самого gyp — который генерирует все мои настройки XCode.
Задача ещё не решена.
Других решений пока нет …