簡體   English   中英

添加#include <boost/asio.hpp> 導致“有不同大小”的問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM