不能将boost regex链接到mingw

时间:2013-01-06 00:36:50

标签: boost mingw static-linking

我的mingw编译器:http://sourceforge.net/projects/mingwbuilds/files/host-windows/releases/4.7.2/32-bit/threads-posix/sjlj/x32-4.7.2-release-posix-sjlj-rev6.7z

提升:http://sourceforge.net/projects/boost/files/boost/1.52.0/boost_1_52_0.7z

(均在D:驱动器上)

代码:

#include <boost\regex.hpp>
int main() {
  boost::regex reg("[a-z]+");
}

命令行:

SET PATH=%PATH%;D:\mingw\bin;D:\mingw\include
g++ -I "d:\mingw\include" -I "d:\boost" -Os -s -o test.exe test.cpp -std=c++11 -static -L "D:\boost\stage\lib" -lboost_regex

d:\boost\stage\lib目录中有libboost_regex-mgw47-mt-1_52.a

过程返回:

d:/mingw/bin/../lib/gcc/i686-w64-mingw32/4.7.2/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -lboost_regex
collect2.exe: error: ld returned 1 exit status

如果我输入* .a文件的确切名称,结果为cannot find -llibboost_regex-mgw47-mt-1_52.a

即使-ld:\boost\stage\lib\libboost_regex-mgw47-mt-1_52.a的整个路径也不起作用。无论我在-l之后提出什么都有同样的效果。

1 个答案:

答案 0 :(得分:3)

正如您所看到的here,您必须使用(-l后跟库的名称删除lib前缀和扩展名.a):

g++ -I "d:\mingw\include" -I "d:\boost" -Os -s -o test.exe test.cpp -std=c++11 -static -L "D:\boost\stage\lib" -lboost_regex-mgw47-mt-1_52

或(不使用-l的库的完整路径):

g++ -I "d:\mingw\include" -I "d:\boost" -Os -s -o test.exe test.cpp -std=c++11 -static D:/boost/stage/lib/libboost_regex-mgw47-mt-1_52.a

PS:我个人做的一件事是使用--layout=tagged构建提升。这使得库的名称更易于管理(在本例中为libboost_regex-mt.a)。