Неопределенные ссылки при включении библиотеки повышения - PullRequest
2 голосов
/ 28 февраля 2010

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

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

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

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

Мои заголовки для буста находятся под /include, а все библиотеки для буста компилируются и под /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 

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

Ответы [ 3 ]

5 голосов
/ 28 февраля 2010

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

0 голосов
/ 17 сентября 2012

Я использую 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 
0 голосов
/ 29 декабря 2010

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

...