我不太熟悉如何在c ++中发生链接
我有一个二进制文件,我在一台机器上编译,我想复制它并在另一台机器上运行它。
我希望这可以工作,因为两台机器上的库是相同的(我认为!)和linux的版本是相同的(相同的内核等)但是,当我复制它...时在我运行它时动态链接的其中一个库中出现了段错误。
它在我编译的机器上像黄油一样运行。但是在我把它翻到的机器上,当我运行二进制文件时,它立即在一个调用堆栈中的std :: string :: compare上进行了段错误,其中一些函数在我动态链接的库中。
我尝试在两台机器上再次安装库并执行ldconfig,但结果相同。
关于如何调试由动态链接问题引起的这类怪异段错误的任何想法?
答案 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