Boost程序无法在Linux上运行

时间:2010-06-17 20:42:04

标签: c++ linux boost linker boost-asio

我有这个程序使用Boost :: Asio作为套接字。我几乎改变了Boost示例中的一些代码。该程序在VS中的Windows上编译和运行就像它应该的那样。但是,当我在Linux上编译程序并运行它时,我遇到了分段错误。

我发布了代码here

我用来编译它的命令是:

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

通过注释掉代码,我发现由于以下行我得到了Segmentation错误:

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 个答案:

答案 0 :(得分:4)

来自-static选项的GCC在线文档:

  

在支持动态链接的系统上,这会阻止与共享库的链接。

Boost可以支持仅静态链接,但只有在OS Package维护者构建它时才这样配置。你绝对肯定你应该使用这面旗帜吗?如果没有,尝试重新编译没有标志,看看是否没有解决问题。