我不太了解 C++ 中的链接是如何发生的
我有一个在一台机器上编译的二进制文件,我想复制它并在另一台机器上运行它。
我希望它能工作,因为两台机器上的库是相同的(我认为!)并且 linux 的版本是相同的(相同的内核等)但是,当我复制它时......它在我运行它时动态链接的库之一中出现段错误。
它在我编译它的机器上运行起来就像黄油一样。但是在我将它 scp 到的机器上,当我运行二进制文件时,它立即在调用堆栈中的 std::string::compare 上与我动态链接的库之一中的某些函数发生段错误。
我尝试在两台机器上再次安装库并执行 ldconfig,但结果相同。
关于如何调试由动态链接问题引起的这些奇怪的段错误有什么想法吗?
最佳答案
好吧,如果您在调试器中运行该程序,可能有助于缩小问题范围。编译时,在g++命令中加入-g -ggdb
参数,然后运行程序时,使用命令gdb ./executable
(可能需要先安装gdb .) 在 gdb 提示符下,键入 run
,您的程序将一直运行直到出现段错误。然后您可以尝试找出问题所在。
网上有很多使用 gdb(GNU 调试器)的教程。
关于linux - 在不同的机器上运行二进制文件会导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5073693/