我有这个程序使用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;
}
我还删除了其他库包含并在编译时链接,但是这个最小的例子仍然给我一个分段错误。
答案 0 :(得分:4)
来自-static
选项的GCC在线文档:
在支持动态链接的系统上,这会阻止与共享库的链接。
Boost可以支持仅静态链接,但只有在OS Package维护者构建它时才这样配置。你绝对肯定你应该使用这面旗帜吗?如果没有,尝试重新编译没有标志,看看是否没有解决问题。