2012-01-27 23 views
0

我在Windows/Visual Studio IDE中開發一個小型的ATL dll,我對C++/boost比較陌生。我在鏈接器選項下添加了boost lib目錄,並將boost根目錄作爲附加的include目錄添加。在我的代碼中,我將它添加爲:如果我只在使用boost時使用頭文件,它會靜態鏈接,還是根本沒有鏈接?

#include <boost/algorithm/string.hpp> 

這是靜態鏈接,動態鏈接還是根本不鏈接?

+4

Boost.StringAlgo是僅標題;頭僅意味着不涉及鏈接。 – ildjarn 2012-01-27 16:38:33

+0

效果與靜態鏈接相同。 – 2012-01-27 16:42:58

回答

3

這是靜態鏈接,動態鏈接還是根本不鏈接?

答案是「這取決於」。

Boost很大。爲了從道格拉斯亞當斯那裏竊取一條線,Boost「很大,真的很大,你不會相信它有多麼巨大,甚至是令人驚歎的大。」

Boost的某些部分純粹作爲模板實現:沒有調用先前編譯並存儲在某個庫中的函數。只使用Boost的這些部分,不需要Boost庫。

Boost的其他部分確實調用之前已編譯並存儲在某個庫中的函數。 (a)你(或者某個系統管理員)是否將Boost庫建立爲動態庫和靜態庫,以及(b)你(或者你的makefile)是如何實現的,告訴鏈接器對待Boost庫。

2

包括任何標題都會將該代碼嵌入到源文件中進行編譯。

所以代碼將被鏈接,因爲你所有的符號都是,但是它不是單獨鏈接的

+0

在視覺工作室中沒有像'#pragma comment(lib,「foo.lib」)'這樣的特殊「東西」,可以用來指定從標頭內鏈接文件嗎? – PlasmaHH 2012-01-27 16:42:31

+0

@PlasmaHH是的,並且boost將它用於不是僅包含標題的庫。但是大多數增強庫只有標題。 – bames53 2012-01-27 16:43:36

+0

@ bames53:所以OP問題的最佳答案將取決於他實際使用的文件...? – PlasmaHH 2012-01-27 16:44:40

相關問題