簡體   English   中英

Dev-C ++ / TDM-GCC:Boost Libaries的鏈接問題從boost.org下載

[英]Dev-C++/TDM-GCC: Linkage Problems with Boost Libaries Downloaded from boost.org

我正在嘗試在Dev-C ++中使用regex (tdm-gcc 4.7.1)。

我從boost.org下載了Boost庫並解壓縮到

C:\Program Files (x86)\Dev-Cpp\boost

並在Dev-C ++中添加

C:\Program Files (x86)\Dev-Cpp\boost\libs

到圖書館。

包含路徑(C / C ++):

C:\Program Files (x86)\Dev-Cpp\boost

main.cpp

#include <boost/regex.hpp> 
using namespace boost; 
int main()
{
   string s ("some txt PING :665454 some_text");
   smatch mt;
  regex r ("PING :(\\d+) "); // error

    system( "pause" );
    return 0;
}

錯誤:

D:\programowanie\dev-c++\main12\main.o  main.cpp:(.text$_ZN5boost9re_detail27cpp_regex_traits_char_layerIcEC2ERKNS0_21cpp_regex_traits_baseIcEE[_ZN5boost9re_detail27cpp_regex_traits_char_layerIcEC2ERKNS0_21cpp_regex_traits_baseIcEE]+0xc3): undefined reference to `boost::re_detail::cpp_regex_traits_char_layer<char>::init()'
D:\programowanie\dev-c++\main12\main.o  main.cpp:(.text$_ZN5boost9re_detail11raw_storage6extendEy[_ZN5boost9re_detail11raw_storage6extendEy]+0x60): undefined reference to `boost::re_detail::raw_storage::resize(unsigned long long)'
c:\program files (x86)\dev-cpp\mingw64\x86_64-w64-mingw32\bin\ld.exe    main12/main.o: bad reloc address 0x60 in section `.text$_ZN5boost9re_detail11raw_storage6extendEy[_ZN5boost9re_detail11raw_storage6extendEy]'
c:\program files (x86)\dev-cpp\mingw64\x86_64-w64-mingw32\bin\ld.exe    final link failed: Invalid operation
D:\programowanie\dev-c++\collect2.exe   [Error] ld returned 1 exit status

我不認為您可以從Boost下載完全針對TDM-GCC的二進制文件。 因此,無論如何,您將遇到名稱修改的經典問題,這在編譯器/工具鏈中是不同的。 如果您從Boost二進制文件下載,那么很明顯這些二進制文件是使用MSVC構建的,因此現在您無法使用TDM-GCC直接鏈接到這些Boost庫,因為它們具有不同的名稱修改約定。

你有3個選擇:

  1. 使用MSVC構建項目;
  2. 使用您當前的工具鏈(即TDM-GCC)從源代碼構建Boost庫;
  3. 使用我的Boost庫版本 - Boost for Windows (最新版本為1.54.0),用於最新的MinGW-w64工具鏈(目前有2個版本)。 因此,除了二進制文件之外,您還必須下載MinGW-w64的相應工具鏈變體(鏈接也在那里)並使用它來構建您的項目。

    注意:盡管您可以使用TDM-GCC構建項目並將其鏈接到我的二進制文件,因為名稱修改是相同的(因為TDM-GCC只是MinGW-W64的衍生版本),因此生成的二進制文件將導致崩潰由於TDM-GCC的修補策略,MinGW-W64與TDM-GCC二進制不兼容。

最后,正如評論中所述,僅僅設置可以找到Boost庫的路徑是不夠的,但是還必須明確告訴編譯器要將項目鏈接到哪個庫。 對於GCC系列編譯器(MinGW,MinGW-w64,TDM-GCC),它使用-l開關完成。 因此,找到可以在Dev-C ++中為項目指定鏈接器選項的位置,並添加-lboost_regex 它將指示編譯器從庫搜索路徑(您已經指定)獲取libboost_regex.a並鏈接到您的項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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