[英]Adding #include <boost/asio.hpp> results in “has different size” problems
編寫(迄今為止)非常簡單的C ++應用程序(實際上我剛開始將我們的應用程序從Qt遷移出來並主要通過boost替換它的功能)我遇到了“常見”錯誤,如下所示:
(路徑修剪)\\ libboost_system.a(error_code.o):重復部分.rdata $ _ZTSN5boost12noncopyable_11noncopyableE [__ ZTSN5boost12noncopyable_11noncopyableE]'具有不同的大小
(路徑修剪)\\ libboost_filesystem.a(codecvt_error_category.o):重復部分.rdata $ _ZTSN5boost12noncopyable_11noncopyableE [__ ZTSN5boost12noncopyable_11noncopyableE]'具有不同的大小
我顯然使用的是系統和文件系統庫,直到現在,當包含asio頭時,一切都進展順利
#include <boost/asio.hpp>
因為這一行代碼: return boost::asio::ip::host_name();
正如我從boost文檔中所理解的那樣,asio是僅包含頭文件庫,因此我沒有包含任何其他boost庫,但libboost_system和libboost_filesystem開始導致這些問題。
我正在使用MinGW在Win 7上工作。 我已經按照以下兩個命令一次性構建了所有的升級庫:
bootstrap mingw
b2 toolset=gcc
我使用相同的MinGW設置,因為我現在正在使用它來構建我的應用程序。 當然,我使用這些預先構建的庫來鏈接我的應用程序。
當我刪除ASIO include時,我的構建再次起作用。
如果我為了簡單起見錯過了我配置中的一些重要部分,請發表評論。
這些可見符號源自的兩個不同的轉換單元(error_code.o與codecvt_error_category.o)尚未使用相同的標志進行編譯(或者,不太可能是boost / noncopyable.hpp的不同來源)。
這或者意味着
你的boost的構建是不一致的(它是否部分重建?在構建過程中它是否配置不一致?你是否部分更新了工具鏈的一部分?)
您正在使用boost_system
二進制文件, boost_system
二進制文件來自與您用於boost_filesystem
構建版本不同的版本
可能是參與不一致的庫之一是間接的 (您可能不會意識到您的程序間接使用boost文件系統,並且添加Asio依賴於不同的boost系統)。
您還可以檢查是否使用與編譯程序相同的標志配置boost構建(包含#include <boost/asio.hpp>
); 這在MSVC上尤其重要,其中使用庫#pragma
s 自動選擇鏈接器輸入
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.