2016-03-26 2 views
0

Я пытаюсь создать свой первый Makefile для простого сервера с использованием сокетов boost.makefile for boost sockets

Я могу получить код для запуска под окнами.

Чтобы заставить его работать под Linux я запустить команду

c++ -I /var/boost/boost_1_55_0/ Source.cpp -o source -lboost_system 

У меня есть сделать файл http://pastebin.com/QTms69Kd

Однако, когда я запускаю его я получаю ошибки как неопределенной ссылки на `импульс :: system :: generic_category() '

Я получил эту ошибку раньше, когда забыл о boost_system в моей команде. Что я делаю неправильно?

ответ

1

Ваш Makefile выглядит правильно, и я обычно ожидал, что он будет работать на Linux.

Вы имеете право на ссылку boost::system. Библиотека boost::asio является «только заголовком», но для сообщений об ошибках используется библиотека boost::system, поэтому boost::system необходимо связать в сборке.

Однако, это их пара осложнений со связыванием библиотек повышения. Во-первых, расположение библиотеки могут быть необходимы в дополнение к самой библиотеке, например .:

LDFLAGS := -L/path/to/boost_1_55_0/built_library_directory -lboost_system 

Во-вторых, boost addd суффиксы имен библиотеки, чтобы определить версию и, возможно, повысить компилятор.
Так boost_system на Windows, становится:

libboost_system-vc140-mt-1_60.lib // MSVC 2015, boost 1.60 
libboost_system-mgw49-mt-1_60.a // MinGW, boost 1.60 

Хотя на установке Fedora (в/USR/lib64):

libboost_system.a 
libboost_system.so // symbolic link to: 
libboost_system.so.1.60.0 // gcc, boost 1.60 

Так что я думаю, что ваша проблема не связана с вашей Makefile, но как ты создали библиотеки boost и где вы их разместили.

Кроме того, почему вы используете такую ​​старую версию boost?

+0

Возможно, потому, что я следовал за старым учебником. (почему повышение было старым) – Catprog