Неопределенные ссылки при включении библиотеки повышения

Я пытаюсь использовать asio-библиотеку boost, но получаю неопределенные ссылки. Я использую Dev-Cpp в Windows, где используется компилятор G++.

Я установил Boost с помощью установщика BoostPro Computing для Boost 1.42.0 [ссылка]. Вот код тестовой программы, которую я пытаюсь сделать:

#include <boost/asio.hpp>
#include <iostream>

int main(void){
    std::cout << "Boost test." << std::endl;
}

Мои заголовки boost include находятся под /include, а все библиотеки для boost скомпилированы и находятся под /lib напрямую. Кажется, какая-то библиотека не включается, но я не знаю, какая. Я попытался включить несколько вероятных, но безрезультатно.

Типы ошибок компоновщика, которые я получаю:

[Linker error] undefined reference to `boost::system::get_system_category()'
[Linker error] undefined reference to `boost::system::get_generic_category()' 
[Linker error] undefined reference to `boost::system::get_generic_category()' 
[Linker error] undefined reference to `boost::system::get_generic_category()' 
[Linker error] undefined reference to `boost::system::get_system_category()' 
[Linker error] undefined reference to `WSACleanup@0' 
[Linker error] undefined reference to `WSAStartup@8' 
[Linker error] undefined reference to `boost::system::get_system_category()' 
ld returned 1 exit status 
C:\Dev-Cpp\Projects\Boost Test\Makefile.win [Build Error]  [boostTest.exe] Error 1 

Я пытался заставить работать некоторое время и был бы очень признателен за любую помощь по этому вопросу. Заранее спасибо.


person rovaughn    schedule 28.02.2010    source источник
comment
Вы ссылаетесь на библиотеку boost? Включение заголовка и ссылка на библиотеку — это две отдельные концепции.   -  person nos    schedule 28.02.2010
comment
Я пробовал связываться с библиотеками, но не знал, какие именно. Я экспериментировал с некоторыми вероятными, такими как библиотеки system и iostream, но каждый раз получал один и тот же результат.   -  person rovaughn    schedule 28.02.2010


Ответы (3)


У меня была эта проблема несколько дней назад при работе с boost::asio. Вам нужно скомпилировать и связать с библиотекой boost::system.

person Hassan Syed    schedule 28.02.2010
comment
Как ты это сделал? Я пытался связать все найденные библиотеки boost_system и libboost_system, но получил те же результаты. - person rovaughn; 28.02.2010
comment
@alecRN: проверьте ответ Руссу. Добавьте -lboost_system к аргументам g++ (фактически к компоновщику). - person Pawel Zubrycki; 29.12.2010

Вы должны ссылаться на libboost_system.a и libboost_filesystem.a.

person russoue    schedule 29.12.2010

Я использую netbeans, поэтому я набрал «-lboost_system» в дополнительных строках! Это была ошибка.

Дополнительные строки помещаются перед объектами, и из-за этого у меня была такая же ошибка. Затем я узнал, что если я запускаю из консоли и помещаю -lboost_system в ОЧЕНЬ КОНЕЦ, все работает отлично. В конце концов я нашел правильное место для установки в netbeans (в библиотеке, а не в разделе команд), и это поле добавляет его в конце!

Помните, важно не только наличие библиотеки! ПОЛОЖЕНИЕ действительно имеет значение :) Не забудьте поставить библиотеку в конец и проверить ее :)

Отлично работаете:

g++.exe -D_WIN32_WINNT=0x0501 -D__USE_W32_SOCKETS   -c -g -MMD -MP -MF async_client.o.d -o async_client.o async_client.cpp
g++.exe -D_WIN32_WINNT=0x0501 -D__USE_W32_SOCKETS -o async_client async_client.o -lws2_32 -lboost_chrono -lboost_system -lboost_thread

Не работает:

g++.exe -D_WIN32_WINNT=0x0501 -D__USE_W32_SOCKETS   -c -g -MMD -MP -MF async_client.o.d -o async_client.o async_client.cpp
g++.exe -D_WIN32_WINNT=0x0501 -D__USE_W32_SOCKETS -lws2_32 -lboost_chrono -lboost_system -lboost_thread -o async_client async_client.o 
person kolorafa    schedule 16.09.2012
comment
Рецензентам из очереди поздних ответов: это дубликат ответа на: stackoverflow.com/questions/5708894/ Я не знаю, как с этим справиться. - person Mysticial; 22.09.2012