【问题标题】:Boost program will not working on LinuxBoost 程序无法在 Linux 上运行
【发布时间】:2010-06-17 20:42:03
【问题描述】:

我有这个程序使用 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

通过注释掉代码,我发现由于以下行导致出现分段错误:

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;
}

我还在编译时删除了其他库包含和链接,但是这个最小的示例仍然给我一个分段错误。

【问题讨论】:

  • 我怀疑这是否是答案,但在 linux 上使用 boost 和黄金链接器时,我遇到了和你一样的大问题。切换回旧的 ld 链接器为我解决了所有问题。
  • 您使用的是哪种编译器和 Linux 操作系统?如果您的最小示例仍然存在段错误,我将开始查看您的环境。

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


【解决方案1】:

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

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

Boost 可以支持仅静态链接,但前提是它在 OS 包维护者构建它时以这种方式配置。你绝对确定你应该使用这个标志吗?如果没有,请尝试在没有标志的情况下重新编译,看看是否不能解决问题。

【讨论】:

  • 这可能是问题所在,如果没有-static,您的测试程序在我的fedora12 机器上编译并运行良好。如果我没记错的话,你可能无法静态编译任何需要 pthread 的东西。
猜你喜欢
  • 2015-01-09
  • 1970-01-01
  • 2021-04-28
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 2011-10-20
  • 1970-01-01
  • 2012-06-08
相关资源
最近更新 更多