如何在Mac OS X上使用GCC链接Intel TBB?

4

我真的无法弄清楚如何在我的Mac上编译和链接Intel TBB库。我运行了商业安装程序和tbbvars.sh脚本,但我无法解决这个问题。我感觉这是一些非常明显的东西,只是因为我已经有一段时间没有做过这样的事情了。

tbb_test.cpp

#include <tbb/concurrent_queue.h>

int main() {
    tbb::concurrent_queue<int> q;
}

g++ tbb_test.cpp -I /Library/Frameworks/TBB.framework/Headers -ltbb

出现了找不到符号的错误。

祝好!

更新:

g++ tbb_test.cpp -I /Library/Frameworks/TBB.framework/Headers -L /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib

可行!


@SilverSun,你可能仍然应该使用“-framework”选项……因为它是等效的,而且它还会在所有框架路径中搜索(即使框架在~/Library/Frameworks或/System/Library/Frameworks中也可以工作)。此外,当你有“伞形框架”时,“-framework”选项将获取一切,而你需要比你现在使用的更多的选项。 - Michael Aaron Safyan
2个回答

3

由于您正在使用框架而不是传统库,因此您需要使用-framework,例如:

g++ tbb_test.cpp -o tbb_test -framework TBB

而不是:

g++ tbb_test.cpp -o tbb_test -I /Library/Frameworks/TBB.framework/Headers -ltbb

“-framework”在manpage中没有太多的文档说明,但我认为它表示您想要构建一个框架。我对他的问题最好的理论是,tbb需要大写。 - Potatoswatter
@Potatoswatter,“-framework”在Mac OS X的文档中有提到(它是GCC的苹果扩展)。它意味着你想要链接到这个框架,而不是构建一个框架。例如,要链接到Foundation框架,你可以使用“-framework Foundation”。 - Michael Aaron Safyan
这个问题/答案是在2010年提出/回答的,所以如果现在的信息已经过时,我也不会感到惊讶。 - Michael Aaron Safyan

0
根据TBB 入门指南(当前版本的第3页)的说明,在$INSTALL/bin目录下有一些脚本,如果您在这些脚本上运行source (例如source bin/tbbvars.sh),它们会设置正确的环境变量。一旦您这样做了,您就不再需要在g++命令行中指定-I-L,这是繁琐、容易出错、最重要的是丑陋的。但您仍然需要使用-ltbb :'(. 这个建议也适用于使用其他类Unix操作系统(如Linux)的人。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接