2009-08-14 1 views
0

ОБНОВЛЕНИЕ: Найден способ его компиляции, см. Ниже.Проблемы с компиляцией программ повышения с использованием cygwin

Привет, У меня возникли проблемы с компиляцией программ повышения под cygwin. Я установил пакеты boost и g ++ по умолчанию из файла setup.exe проекта cygwin.

На моих системах Linux, я могу составить программу reg.cpp, используя следующие:

g++ -I/usr/include/boost -lboost_regex -o reg reg.cpp 

На Cygwin я должен изменить это только немного:

g++ -I/usr/include/boost-1_33_1 -lboost_regex-gcc-mt -o reg reg.cpp 

Проблема заключается в том, что версия cygwin заставляет компоновщик вытягивать миллион неопределенных опорных ошибок. То же самое происходит с использованием библиотек фрейм-тестов boost.

Линкером является поиск boost_regex-gcc-mt, но он не соответствует соответствующему файлу. Вот первая ошибка линкера:

undefined reference to `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::do_assign(char const*, char const*, unsigned int)' 

Как компилировать

Я нашел решение here Для компиляции, я сделал следующее:

g++ -I/usr/include/boost-1_33_1 reg.cpp -o reg -lboost_regex-gcc-mt 

Согласно сообщению, это что-то со ссылкой на компоновщик. Кто-нибудь понял, почему это имеет значение в cygwin, но не в современном Linux?

ответ

2

Оказалось, что компоновщики традиционно обрабатывают библиотеки справа налево. Большинство компоновщиков не заботятся о размещении библиотек, но cygwin делает это. Поэтому библиотека boost_regex должна идти в конце.

0

Если посмотреть на примере документации повышающего (Getting Started):

Команда на Cygwin должна быть:

g++ -c example.cpp 
g++ -o example.exe example.o -lboost_regex-mt 

(Библиотека включена после файла CPP.) НЕПРАВИЛЬНО:

g++ -o example.exe -lboost_regex-mt example.o 
Смежные вопросы