自己利用boost庫撰寫了一個執行緒庫,把這個執行緒庫編譯成靜態庫(把boost執行緒庫靜態鏈接進來),出現waring:LNK4221 此物件檔案未定義任何之前未定義的公共符號,因此任何耗用此庫的鏈接操作都不會使用此檔案,在使用自己撰寫的庫的時候,編譯程式出現找不到libboost_thread-vc110-mt-sgd-1_55.lib(編譯runtime-link = /mtd)。求大神指教
uj5u.com熱心網友回復:
而將自己的庫編譯成dll就可以使用,為什么?uj5u.com熱心網友回復:
MSDN:錯誤訊息 聯結器工具警告 LNK4221
未找到公共符號;存檔成員將不可訪問
向庫添加了不具有公共符號的 .obj 檔案。物件中的符號在后面的包括 .lib 的聯結器操作中將不可訪問。
若要解決此警告,請不要將不具有公共符號的 .obj 檔案鏈接到庫中。
(1)編譯器將源檔案編譯成匯編代碼,然后由匯編器(assembler)翻譯成機器指令
(再加上其它相關資訊)后輸出到一個個目標檔案(object file,VC的編譯器編譯出
的目標檔案默認的后綴名是.obj)中;(2)聯結器(linker)將一個個的目標檔案
(或許還會有若干程式庫)鏈接在一起生成一個完整的可執行檔案。
編譯器編譯源檔案時會把源檔案的全域符號(global symbol)分成強(strong)和弱(weak)
兩類傳給匯編器,而隨后匯編器則將強弱資訊編碼并保存在目標檔案的符號表中。
uj5u.com熱心網友回復:
懷疑是不是boost庫的路徑沒有打通,在非工程里面添加boost庫的完整路徑,或者把整個庫復制到程式原始碼目錄中試試看uj5u.com熱心網友回復:
地方方庫的路徑是添加進去了的,編譯boost庫的時候出現waring:LNK4221 此物件檔案未定義任何之前未定義的公共符號,因此任何耗用此庫的鏈接操作都不會使用此檔案;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/130049.html
