2016-12-23 2 views
-2

Я пытаюсь переключиться в среду Windows из Linux, но считаю это очень трудным путем.Компиляция boost :: asio example на Windows

На этот раз я хотел проверить, могу ли я работать с библиотекой boost.

У меня были проблемы с компиляцией boost на windows, поэтому я загрузил предварительно скомпилированную версию. Я распаковал все и положительно оценил, что я могу скомпилировать библиотекари только для заголовков.

Затем я скопировал несколько простых примеров boost :: asio. Я создал все в Eclipse. Компиляция прошла нормально, но во время связывания я получил проблему «неопределенной ссылки» на внутреннее наполнение «boost :: system».

C:/Users/jacek/cpp/boost_1_62_0/boost/system/error_code.hpp:221: undefined reference to `boost::system::generic_category()' 
C:/Users/jacek/cpp/boost_1_62_0/boost/system/error_code.hpp:222: undefined reference to `boost::system::generic_category()' 
C:/Users/jacek/cpp/boost_1_62_0/boost/system/error_code.hpp:223: undefined reference to `boost::system::system_category()' 

Поэтому я добавил «-lboost_system», а также путь к каталогу библиотеки, мои ссылающихся варианты. Но это не помогло.

g++ "-LC:\\Users\\jacek\\cpp\\boost_1_62_0\\lib64-msvc-14.0" -o TestAsio.exe "src\\Main.o" -lboost_system 

Я проверил каталог библиотек и обнаружил, что в названии есть куча файлов, содержащих «boost_system». К ним относятся:

  • libboost_system-vc140-мт-1_62.lib
  • libboost_system-vc140-мт-Г.Д.-1_62.lib
  • libboost_system-vc140-т-ы-1_62.lib
  • libboost_system -vc140-т-синг-1_62.lib
  • libboost_system-vc140-втор-1_62.lib
  • libboost_system-vc140-синг-1_62.lib

Я не знал, что я должен использовать. Я попробовал добавить «libboost_system-vc140-mt-1_62» к настройкам ссылок, я попробовал все остальные файлы, я попробовал переименовать файлы в шаблон linux «libboost_system.a», но ничего не получилось.

g++ "-LC:\\Users\\jacek\\cpp\\boost_1_62_0\\lib64-msvc-14.0" -o TestAsio.exe "src\\Main.o" -llibboost_system-vc140-mt-1_62 -llibboost_system-vc140-mt-gd-1_62 -llibboost_system-vc140-mt-s-1_62 -llibboost_system-vc140-mt-sgd-1_62 -llibboost_system-vc140-s-1_62 -llibboost_system-vc140-sgd-1_62 

Что я здесь делаю неправильно? Пожалуйста, помогите ... YotKay

+1

"-LC: \\ выглядит странно, -L" C: \\? – willll

+0

Я думаю, что нашел решение здесь: http://boost.org/more/getting_started/windows.html – YotKay

+2

Дело в том, что предварительно скомпилированные двоичные файлы были скомпилированы с помощью Visual Studio, и они НЕ СОВМЕСТИМЫ с G ++. Дерьмо! – YotKay

ответ

0

Я решил это сам с помощью комментария с этого поста: boost asio example compilation error

Похоже предкомпилированного версия Boost, создается с визуальной Студийского и не совместим с G ++ , Я, если я решил установить MinGW, тогда я не могу использовать предварительно скомпилированную версию boost, но должен сам ее скомпилировать с помощью g ++.

Я сделал это. Теперь у меня есть библиотеки, скомпилированные с G ++.

Я указываю путь к библиотеке системы повышения следующим образом: c: \ Users \ jacek \ cpp \ boost_1_62_0 \ libraries \ boost \ bin.v2 \ libs \ system \ build \ gcc-mingw-6.2.0 \ отлаживать \ ссылка статическую \

и добавить эту опцию: -lboost_system-mgw62-d-1_62

Теперь проблема с усилением :: системы исчезает. Тем не менее, еще один всплывает с повышением asio, но, к счастью, ответ здесь: MinGW linker error: winsock

Пример хорошо работает сейчас на моем ноутбуке Windows 10.

#include <boost/asio/io_service.hpp> 
#include <boost/asio/steady_timer.hpp> 
#include <chrono> 
#include <iostream> 

using namespace boost::asio; 

int main() 
{ 
    io_service ioservice; 

    steady_timer timer{ioservice, std::chrono::seconds{3}}; 
    timer.async_wait([](const boost::system::error_code &ec) 
    { std::cout << "3 sec\n"; }); 

    ioservice.run(); 
} 
Смежные вопросы