2012-07-10 23 views
1

回答我最近的一個問題,有人建議我在boost中使用一個函數來解決我的問題。這讓我增加了以下.HPP文件第一次使用提升 - 爲什麼我不必在構建時明確鏈接到它?

#include <boost/algorithm/string.hpp> 

和函數調用

boost::replace_all(marketPrices, "\\:", "-COLON-"); 

到我的源文件使用升壓我的第一次,然後跑去使生成使用G ++作爲正常的我的應用程序。

在這一點上,我意識到我沒有添加任何新的庫到我的生成文件中的鏈接步驟,並完全預期鏈接步驟失敗。令我驚訝的是,它並沒有失敗 - 不僅如此,而且代碼完全按照它應該沒有任何抱怨的方式運行。

這讓我感到驚訝 - 至少g ++是如何知道要鏈接到什麼的,爲什麼會自動這麼做呢?還是我錯過了boost庫的運行方式的基礎知識?我知道boost使用了很多模板,這是我不太熟悉的C++方面,所以我想知道這是否與我所看到的有關。

+0

Boost.StringAlgo是僅標題 - 不涉及鏈接。 – ildjarn 2012-07-10 21:19:58

+1

如果您使用過Visual Studio,即使您使用的庫不是僅包含頭文件的庫,您甚至會更驚喜地發現,您仍然*不需要使用鏈接器選項,因爲Visual C++允許您通過源代碼中的編譯指示來設置鏈接器選項,並且boost可以利用這一點。 – 2012-07-10 21:54:57

回答

7

一些增強庫是只有標頭這意味着沒有可鏈接的二進制文件。其他庫如boost::thread將需要您爲鏈接器添加一個新的庫。

+0

要添加:只存在標題庫的原因是C++模板代碼對編譯器必然是完全可見的,所以它需要的任何東西已經有了。大部分Boost都是模板化的,編譯器完全可以看到Boost的大部分內容。 – GManNickG 2012-07-10 21:22:20

+0

當然啊 - 現在我覺得很蠢。感謝你的回答。 – mathematician1975 2012-07-10 21:22:24

+0

@ mathematician1975不要覺得太愚蠢,那裏有很多奇怪的東西,比如[#pragmas自動鏈接庫](http://stackoverflow.com/questions/1685206/pragma-commentlib-xxx-lib-equivalent -under-的Linux)。這裏有很多「魔力」,但通常只有在它破裂時纔會發現它。 :) – HostileFork 2012-07-10 23:37:35

相關問題