MacOS 上的 Qbs 静态库
Posted
技术标签:
【中文标题】MacOS 上的 Qbs 静态库【英文标题】:Qbs StaticLibrary on MacOS 【发布时间】:2017-11-26 12:15:14 【问题描述】:我尝试将现有项目从 qmake 移动到 qbs,到目前为止一切正常,但我无法在 MacOS 上链接到该项目中的谷歌测试静态库,而在 Windows 上它工作正常。
在 MacOS 上我得到:-1: error: symbol(s) not found for architecture x86_64
GitHub repo of the project
googletest.qbs:
import qbs
StaticLibrary
name: "GoogleTest"
files: [
"googletest/googletest/src/gtest-all.cc",
"googletest/googlemock/src/gmock-all.cc"
]
cpp.includePaths: [
"googletest/googletest/include",
"googletest/googlemock/include",
"googletest/googletest",
"googletest/googlemock"
]
Depends name: "cpp"
Export
Depends name: "cpp"
cpp.includePaths: [
"googletest/googletest/include",
"googletest/googlemock/include"
]
test.qbs:
import qbs
QtApplication
name: "Test"
targetName: "Test"
Depends name: "Qt"; submodules: ["core","testlib"]; versionAtLeast: "5.6"
Depends name: "GoogleTest"
cpp.cxxLanguageVersion: "c++11"
consoleApplication: true
files: [
"QtTypePrinters.h",
"main.cpp",
"QStringTest.cpp"
]
【问题讨论】:
【参考方案1】:您需要在静态库产品中设置以下属性:
cpp.cxxLanguageVersion: "c++11"
cpp.cxxStandardLibrary: "libc++"
cpp.minimumMacosVersion: "10.7" // or higher
默认情况下,Qbs 只是让编译器推断默认值。 gtest 恰好需要 C++11 和 libc++,而这又仅在 macOS 10.7 及更高版本上受 Apple 支持。
【讨论】:
【参考方案2】:您确定这是来自链接器的全部错误消息吗?当然也提到了实际缺少的符号?
【讨论】:
如果我通过 cpp.libraryPaths 和 cpp.staticLibraries 链接到该库,它可以工作,但这不是我想要的。 请提供完整的错误信息,以便我们正确诊断问题。 可能是标准库兼容性问题?您还没有粘贴整个编译输出,因此我们无法确定,但请尝试将 'cpp.cxxLanguageVersion: "c++11"' 也添加到您的静态库中。 请看项目的github仓库 @emKaroly 最后,设置cpp.minimumMacosVersion: "10.7"
(或更高版本)。以上是关于MacOS 上的 Qbs 静态库的主要内容,如果未能解决你的问题,请参考以下文章
Go 编译静态库 给ios,windows,macos,android,linux使用