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

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

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

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

并在Dev-C ++中添加

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

到图书馆。

包含path(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库版本 – 用于Windows的Boost (最新版本为1.54.0),用于最新的MinGW-w64工具链(目前有两个版本)。 因此,除了二进制文件之外,您还必须下载相应的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并链接到您的项目。