#c #boost-asio
#c #повышение-asio
Вопрос:
я уже установил библиотеки boost с помощью bjam install, но когда я компилирую программу:
#include boost/asio.hpp
int main()
{
return 0;
}
возникают такие ошибки:
/tmp/ccVR3eeF.o: In function `__static_initialization_and_destruction_0(int, int)':
sda.cpp:(.text 0x52): undefined reference to `boost::system::generic_category()'
sda.cpp:(.text 0x5e): undefined reference to `boost::system::generic_category()'
sda.cpp:(.text 0x6a): undefined reference to `boost::system::system_category()'
/tmp/ccVR3eeF.o: In function `boost::asio::error::get_system_category()':
sda.cpp:(.text._ZN5boost4asio5error19get_system_categoryEv[boost::asio::error::get_system_category()] 0x5): undefined reference to `boost::system::system_category()'
/tmp/ccVR3eeF.o: In function `boost::asio::detail::posix_tss_ptr_create(unsigned intamp;)':
sda.cpp:(.text._ZN5boost4asio6detail20posix_tss_ptr_createERj[boost::asio::detail::posix_tss_ptr_create(unsigned intamp;)] 0x19): undefined reference to `pthread_key_create'
/tmp/ccVR3eeF.o: In function `boost::asio::detail::posix_tss_ptr<boost::asio::detail::call_stack<boost::asio::detail::task_io_service>::context>::~posix_tss_ptr()':
sda.cpp:(.text._ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_15task_io_serviceEE7contextEED2Ev[boost::asio::detail::posix_tss_ptr<boost::asio::detail::call_stack<boost::asio::detail::task_io_service>::context>::~posix_tss_ptr()] 0x15): undefined reference to `pthread_key_delete'
/tmp/ccVR3eeF.o: In function `boost::asio::detail::posix_tss_ptr<boost::asio::detail::call_stack<boost::asio::detail::strand_service::strand_impl>::context>::~posix_tss_ptr()':
sda.cpp:(.text._ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_14strand_service11strand_implEE7contextEED2Ev[boost::asio::detail::posix_tss_ptr<boost::asio::detail::call_stack<boost::asio::detail::strand_service::strand_impl>::context>::~posix_tss_ptr()] 0x15): undefined reference to `pthread_key_delete'
collect2: ld returned 1 exit status
что я должен сделать? как я могу создать эти библиотеки?
Ответ №1:
Повышение.Asio требует повышения.Системная библиотека также; вам нужно добавить -lboost_system
в вашу командную строку компоновщика.
Когда вы добавляете функции в свою программу, вам также могут понадобиться другие части Boost, например Boost.Поток, Усиление.Date_Time и так далее. Видишь http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/using.html для получения подробной информации.
Ответ №2:
Я использую netbeans, поэтому я ввел ‘-lboost_system’ в дополнительных строках! Это была ошибка.
Перед объектами помещены дополнительные строки, и из-за этого у меня возникла та же ошибка. Затем я обнаружил, что если я запускаю с консоли и ставлю -lboost_system в САМОМ КОНЦЕ, все работает отлично. В конце я нашел нужное место для установки в netbeans (в разделе «Библиотека, а не команда»), и это поле добавляет его в конце!
Помните, это имеет значение не только в том случае, если вы управляете библиотекой ! ПОЗИЦИЯ действительно засчитывается 🙂 Не забудьте поставить library в конце и проверить это 🙂
Отлично работает:
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
Комментарии:
1. Этот ответ трудно прочесть. Я недостаточно знаком, чтобы редактировать его самому.