如何禁用TBB的自动链接

时间:2011-09-27 06:33:27

标签: c++ linker tbb

当我将我的VS项目构建为Debug时,它总是与tbb_debug.lib自动链接(tbb_debug.lib又与tbb_debug.dll链接)。有没有办法覆盖它并使tbb.lib链接,即使是Debug构建?

2 个答案:

答案 0 :(得分:4)

首先,你确定它是'自动关联'吗?

如果是,则使用#pragma comment( lib, tbb_debug.lib )完成。找到这段代码的位置,如果是你的话就修改它,或者以某种方式取消它(通过不包括代码所在的文件,或者通过#defining禁用这段代码的东西;任何理智的图书馆作者应该提供这样的机制并且应该清楚地记录下来。)

如果没有此类编译指示,则链接库是因为它出现在项目设置中。右键单击项目 - >属性 - >链接器 - >输入和调整。

编辑感谢Alexey的评论,您似乎可以禁用TBB的自动链接,如this header file中所示。定义__TBB_NO_IMPLICIT_LINKAGE应该可以解决问题。

答案 1 :(得分:1)

如果使用tbb_debug.lib完成自动链接:

#pragma comment( lib, "tbb_debug" )

然后如the MSDN documentation page for pragma comment所述:

  

将库搜索记录放在目标文件中。 ...库名称遵循目标文件中的默认库搜索记录;链接器搜索此库,就像您在命令行上命名它一样,前提是该库未使用/nodefaultlib指定。

您可以通过传递链接器选项#pragma comment( lib, "tbb_debug" )来禁用通过/NODEFAULTLIB:tbb_debug.lib进行自动链接。

但是,您是否因为收到“多重定义的符号”错误(LNK1169)或LNK4098而询问?如果是这样,可能是您将tbb.lib列为调制和发布配置文件的链接器的输入。您应该为调试配置文件删除此条目,因为正在自动链接正确的库。