我试图构建一个可执行文件,它使用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
,这些选项都不起作用。
我看到这篇post帖子谈到了如何告诉textView
在哪里可以找到我的图书馆,但我认为它没有成功(我对所有人都很有信心)每次我干净的东西都会被取消)。我正在寻找一种方法,我可以从gyp本身解决这个问题 - 这会生成我的所有Xcode设置。