boost庫的鏈結問題小記

2022-03-06 10:16:58 字數 794 閱讀 9242

一直有疑問,boost部分庫需要編譯成lib或者dll才能使用,貌似預設的都是鏈結的靜態庫,但是比如regex,使用時從來不需要#pragma comment(lib,"")或者在link選項裡新增進去,表示不解。後來網上一搜,boost 裡有個auto_link.hpp,貌似來幫你完成鏈結工作...

下面**...

使用boost的許多庫都只需包含標頭檔案,例如:

#include

此時,不用包含庫檔案,boost的auto-link機制將會自動幫我們包含對應的靜態lib。也就是說,boost預設是以靜態方式鏈結的,這樣我們的工程屬性最好也設為multi-threaded (debug)。如果想使用dll動態方式鏈結,需要預先定義巨集:

#define boost_all_dyn_link

#define boost_all_no_lib

#pragma comment(lib, "boost_thread-vc90-mt-1_39.lib")

或#pragma comment(lib, "boost_thread-vc90-mt.lib")

這兩個lib其實是一樣的,實在不明白boost編譯時為什麼每個庫都要複製乙份,難道是因為後者在公升級boost版本後不用改**?另外還有乙個比較有用的巨集:

#define boost_lib_diagnostic

它可以讓vc在編譯時的output視窗中輸出程式具體鏈結了哪些boost庫以及鏈結順序。

關於boost的auto-link機制,詳細可以看看boost\config\auto_link.hpp裡的**,很容易可以讀懂,並且值得我們學。

boost 庫的編譯與鏈結

最近在看專案框架的底層 的過程中 發現了大量的 都是使用boost進行開發 boost庫由c 標準委員會組織的成員所發起的,如果之前有使用過stl的人來說 那麼boost庫的學習會相對簡多。boost庫中有部分庫我們是可以直接使用的 不需要進行編譯 而有些庫的使用是需要編譯的 那麼我們如何知道那些庫...

boost靜態鏈結的問題 lgcc s

在使用gcc g 編譯程式時我們希望指向一些庫是使用靜態的鏈結方式.另外的一些是動態的方式.我以boost 為例.如果我們要使用靜態庫則是這樣的 g main.cpp lpthread usr lib64 libboost thread.a usr lib64 libboost system.a 靜...

Linux下C 程式鏈結boost庫

廢話不說,入正題。我使用eclipse來開發c 1 編譯好boost,編譯方法boost目錄下有。假設庫檔案在 usr local lib下 2 eclipse中在工程中右鍵,選屬性 c c build setting gcc c linker。如果使用靜態鏈結,miscellaneous中增加ot...