提升: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
之后提出什么都有同样的效果。
答案 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
)。