首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dev-C++/TDM-GCC:从boost.org下载的Boost Libaries的链接问题

Dev-C++/TDM-GCC:从boost.org下载的Boost Libaries的链接问题
EN

Stack Overflow用户
提问于 2013-10-13 11:55:26
回答 1查看 3.7K关注 0票数 1

我试图在Dev-C++ (tdm-gcc 4.7.1)中使用regex .

我已经从boost.org下载了Boost库并将其解压缩到

代码语言:javascript
复制
C:\Program Files (x86)\Dev-Cpp\boost

在Dev-C++中添加

代码语言:javascript
复制
C:\Program Files (x86)\Dev-Cpp\boost\libs

去图书馆。

包括路径(C/C++):

代码语言:javascript
复制
C:\Program Files (x86)\Dev-Cpp\boost

main.cpp

代码语言:javascript
复制
#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;
}

错误:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2013-10-13 12:13:41

我认为你不可能从Boost下载的二进制文件正是针对TDM-GCC的。因此,无论发生什么,名称残缺都会遇到一个经典的问题,这在编译器/工具链中是不同的。如果您从Boost双星下载,那么很明显,这些二进制文件是用MSVC构建的,因此现在您很难用TDM-GCC直接链接到这些Boost库,因为不同的名称破坏了约定。

你有三个选择:

  1. 使用MSVC构建您的项目;
  2. 你现在的工具链,即TDM-GCC,从源代码中构建Boost库;
  3. 使用我构建的Boost库- Windows的Boost (最新版本为1.54.0)用于最新的MinGW-w64工具链(目前有2个变体)。因此,除了二进制文件之外,您还必须下载MinGW-w64的相应工具链变体(链接也在那里),并使用它构建您的项目。 注意:尽管您可以构建并链接您的项目与您的TDM-GCC的二进制文件,因为名称损坏是相同的(因为TDM-GCC只是MinGW-w64的一个派生),由此产生的应用程序将受到崩溃的影响,因为由于TDM的修补策略,由MinGW-w64产生的二进制文件与TDM不兼容。

最后,正如已经在注释中指出的,仅仅设置可以找到Boost库的路径是不够的,还需要显式地告诉编译器您希望链接项目的库。对于GCC系列的编译器(MinGW,MinGW-w64,TDM-GCC),它是用-l开关完成的.因此,可以在哪里为项目指定Dev-C++中的链接器选项,并添加-lboost_regex。它将指示编译器从库搜索路径(您已经指定的)获取libboost_regex.a并链接到您的项目。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19344905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档