не могу связать регулярное выражение boost с mingw

мой компилятор 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

повышение: 52_0.7z" rel="nofollow">http://sourceforge.net/projects/boost/files /boost/1.52.0/boost

#include <boost\regex.hpp>
int main() {
  boost::regex reg("[a-z]+");
}
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, имеет тот же эффект.


person rsk82    schedule 06.01.2013    source источник


Ответы (1)


Как видите, здесь вы должны использовать либо (-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).

person Community    schedule 06.01.2013