0

我的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\liblibboost_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都有相同的效果。

4

1 回答 1

4

正如您在此处看到的,您必须使用其中一个(-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)。

于 2013-01-06T07:08:55.160 回答