2011-09-27 57 views
0

当我将我的VS项目构建为Debug时,它始终与tbb_debug.lib(后者又与tbb_debug.dll链接)自动链接。有没有一种方法可以覆盖这一点,并使tbb.lib链接即使是调试版本?如何为TBB禁用自动链接

+1

请问为什么不要调试库? – stijn

+0

,因为我的二进制文件是一个插件,它的主机已经与TBB的版本库链接。 – Middleware

+0

好点确实 – stijn

回答

4

首先,你确定它是'自动链接'吗?

如果是这样,则使用#pragma comment(lib, tbb_debug.lib)完成。找到这个代码的位置,如果是你的代码,可以修改它,或者以某种方式解除它(通过不包括代码所在的文件,或者#定义禁用此代码的东西;任何理智的库编写者都应该提供这样的机制它也应该清楚记录)。

如果没有这样的编译指示,库链接,因为它出现在项目设置。右键单击项目 - >属性 - >链接器 - >输入并调整。

编辑感谢Alexey的评论,似乎你可能会禁用TBB的自动链接,如this header file所示。定义__TBB_NO_IMPLICIT_LINKAGE应该做的伎俩。

+2

在TBB的情况下,宏名称是__TBB_NO_IMPLICIT_LINKAGE。但截至目前,它不是官方的,有记录的功能。 –

+0

@AlexeyKukanov太棒了,我会将它添加到我的回答中 – stijn

1

如果与tbb_debug.lib的autolinking与实现:

#pragma comment(lib, "tbb_debug") 

然后作为the MSDN documentation page for pragma comment解释说:

会在对象文件库中的搜索记录。 ...库名称遵循目标文件中的默认库搜索记录;链接器搜索这个库,就好像您已经在命令行上命名了它,只要该库不是用/nodefaultlib指定的。

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

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

+0

我在问,因为无论我如何更改项目文件,构建都在寻找tbb_debug。我认为你指出的是正确的,一有机会就会尝试。 – Middleware