2011-09-27 49 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