Повышение.Проблема с установкой Asio

#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. Этот ответ трудно прочесть. Я недостаточно знаком, чтобы редактировать его самому.