2016-12-23 132 views
-2

我試圖從Linux切換到Windows環境,但發現它非常困難。在Windows上編譯boost :: asio示例

這次我想測試是否可以使用boost庫。

我在編譯Windows上的boost時遇到了問題,所以我下載了預編譯版本。我將所有內容解壓縮並積極測試,以便編譯僅包含頭文件的映像。

然後我複製了一些簡單的boost :: asio示例。我在Eclipse中設置了一切。編譯進行得很好,但在鏈接期間,我將'未定義的引用'問題與'boost :: system'內部的東西相關聯。

C:/Users/jacek/cpp/boost_1_62_0/boost/system/error_code.hpp:221: undefined reference to `boost::system::generic_category()' 
C:/Users/jacek/cpp/boost_1_62_0/boost/system/error_code.hpp:222: undefined reference to `boost::system::generic_category()' 
C:/Users/jacek/cpp/boost_1_62_0/boost/system/error_code.hpp:223: undefined reference to `boost::system::system_category()' 

因此,我在鏈接選項中添加了'-lboost_system'以及庫目錄的路徑。但是這沒有幫助。

g++ "-LC:\\Users\\jacek\\cpp\\boost_1_62_0\\lib64-msvc-14.0" -o TestAsio.exe "src\\Main.o" -lboost_system 

我檢查了圖書館目錄,發現有一串包含名爲「boost_system」文件。它們是:

  • libboost_system-vc140-MT-1_62.lib
  • libboost_system-vc140-MT-GD-1_62.lib
  • libboost_system-vc140-MT-S-1_62.lib
  • libboost_system -vc140-MT-SGD-1_62.lib
  • libboost_system-vc140-S-1_62.lib
  • libboost_system-vc140-SGD-1_62.lib

我不知道該用哪個。我嘗試添加'libboost_system-vc140-mt-1_62'到鏈接選項,我嘗試了所有其他文件,我嘗試將文件重命名爲linux模式'libboost_system.a',但沒有任何工作。

g++ "-LC:\\Users\\jacek\\cpp\\boost_1_62_0\\lib64-msvc-14.0" -o TestAsio.exe "src\\Main.o" -llibboost_system-vc140-mt-1_62 -llibboost_system-vc140-mt-gd-1_62 -llibboost_system-vc140-mt-s-1_62 -llibboost_system-vc140-mt-sgd-1_62 -llibboost_system-vc140-s-1_62 -llibboost_system-vc140-sgd-1_62 

我在這裏做錯了什麼? boost asio example compilation error

它看起來像升壓的預編譯的版本是用Visual Studion創建和不兼容G ++: 請幫助... YotKay

+1

「-LC:\\看起來很奇怪,-L」C:\\? – willll

+0

我想我在這裏找到了一個解決方案:http://boost.org/more/getting_started/windows.html – YotKay

+2

問題是預編譯的二進制文件是用Visual Studio編譯的,它們與G ++不兼容。拉屎! – YotKay

回答

0

我從這篇文章評論的幫助下解決了它自己。如果我決定安裝MinGW,那麼我不能使用boost的預編譯版本,但必須使用g ++自己編譯它。

我做到了。 現在我有用G ++編譯的庫。

我指定了這樣的升壓系統庫的路徑: c:\ Users \ jacek \ cpp \ boost_1_62_0 \ libraries \ boost \ bin.v2 \ libs \ system \ build \ gcc-mingw-6.2.0 \調試\鏈接靜態\

,並添加此選項: -lboost_system-mgw62-d-1_62

現在與提升問題::系統中消失。然而,另一個彈出提升asio,但幸運的是答案在這裏:MinGW linker error: winsock

這個例子現在在我的Windows 10筆記本電腦上工作正常。

#include <boost/asio/io_service.hpp> 
#include <boost/asio/steady_timer.hpp> 
#include <chrono> 
#include <iostream> 

using namespace boost::asio; 

int main() 
{ 
    io_service ioservice; 

    steady_timer timer{ioservice, std::chrono::seconds{3}}; 
    timer.async_wait([](const boost::system::error_code &ec) 
    { std::cout << "3 sec\n"; }); 

    ioservice.run(); 
} 
相關問題