在不同的机器上运行二进制导致段错误

时间:2011-02-22 03:27:17

标签: linux linker g++

我不太熟悉如何在c ++中发生链接

我有一个二进制文件,我在一台机器上编译,我想复制它并在另一台机器上运行它。

我希望这可以工作,因为两台机器上的库是相同的(我认为!)和linux的版本是相同的(相同的内核等)但是,当我复制它...时在我运行它时动态链接的其中一个库中出现了段错误。

它在我编译的机器上像黄油一样运行。但是在我把它翻到的机器上,当我运行二进制文件时,它立即在一个调用堆栈中的std :: string :: compare上进行了段错误,其中一些函数在我动态链接的库中。

我尝试在两台机器上再次安装库并执行ldconfig,但结果相同。

关于如何调试由动态链接问题引起的这类怪异段错误的任何想法?

2 个答案:

答案 0 :(得分:1)

如果您在调试器中运行程序,它可能有助于缩小问题范围。编译时,将-g -ggdb参数添加到g ++命令,然后在运行程序时,使用命令gdb ./executable(您可能需要先安装gdb。)在gdb提示符下,键入{{1}并且你的程序将运行直到它出现段错误。然后你可以试着弄清楚出了什么问题。

有很多关于在线使用gdb(GNU调试器)的教程。

答案 1 :(得分:0)

听起来像二进制兼容性问题。这个SO链接可能会有所启发: Creating a generic binary in linux for all x86 machines