Программа Boost не работает на Linux - PullRequest
2 голосов
/ 18 июня 2010

У меня есть эта программа, которая использует Boost :: Asio для сокетов. Я в значительной степени изменил код из примеров Boost. Программа компилируется и запускается так же, как и на Windows в VS. Однако, когда я компилирую программу в Linux и запускаю ее, я получаю ошибку сегментации.

Я разместил код здесь

Команда, которую я использую для компиляции, такова:

c++ -I/appl/htopopt/Linux_x86_64/NTL-5.4.2/include 
-I/appl/htopopt/Linux_x86_64/boost_1_43_0/include 
mpqs.cpp mpqs_polynomial.cpp mpqs_host.cpp -o mpqs_host 
-L/appl/htopopt/Linux_x86_64/NTL-5.4.2/lib -lntl 
-L/appl/htopopt/Linux_x86_64/gmp-4.2.1/lib -lgmp -lm 
-L/appl/htopopt/Linux_x86_64/boost_1_43_0/lib -lboost_system 
-lboost_thread -static -lpthread

Комментируя код, я обнаружил, что получаю ошибку сегментации из-за следующей строки:

boost::asio::io_service io_service;

Может ли кто-нибудь оказать какую-либо помощь относительно того, в чем может быть проблема (и решение)?

Спасибо!

Редактировать: я попытался изменить программу на минимальный пример, не используя другие библиотеки или заголовки, просто boost / asio.hpp:

#define DEBUG 0

#include <boost/asio.hpp>

int main(int argc, char* argv[]) {  
     boost::asio::io_service io_service;
     return 0;
}

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

1 Ответ

4 голосов
/ 18 июня 2010

Из онлайн-документации GCC опции -static:

В системах, которые поддерживают динамическое связывание, это предотвращает связывание с общими библиотеками.

Boost может поддерживать только статическое связывание, но только в том случае, если оно было настроено таким образом, когда разработчик пакета ОС создал его. Вы абсолютно уверены, что должны использовать этот флаг? Если нет, попробуйте перекомпилировать без флага и посмотрите, не решит ли это проблему.

...