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

发布于 2024-10-18 15:17:06 字数 369 浏览 1 评论 0原文

我不太熟悉 C++ 中链接是如何发生的,

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

我希望这能起作用,因为两台机器上的库是相同的(我认为!)并且linux的版本是相同的(相同的内核等)但是,当我将其复制过来时......它似乎出现了段错误在其中一个库中,我在运行时动态链接它。

它在我编译它的机器上运行得像黄油一样。但是在我 scp 到的机器上,当我运行二进制文件时,它会立即在调用堆栈中的 std::string::compare 上与我动态链接的库之一中的某些函数发生段错误。

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

关于如何调试由动态链接问题引起的这些奇怪的段错误有什么想法吗?

I'm not well versed in how linking happens in c++

I have a binary that i compiled on one machine and i'd like to copy it and run it on another machine.

I would expect this to work, because the libraries are the same on both machines (i think!) and the version of linux is the same (same kernel, etc.) However, when i copy it over... it appears to segfault in one of the libraries i am dynamically linking when i run it.

It runs like butter on the machine that i compiled it on. But on the machine that i scp'd it over to, when i run the binary, it instantly segfaults on a std::string::compare in a call stack with some functions in one of the libraries i am dynamically linking.

i tried installing the libraries again on both machines and doing ldconfig, but same results.

any ideas on how to debug these kind of weird segfaults caused by dynamic linking issues?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

鹿港巷口少年归 2024-10-25 15:17:06

好吧,如果您在调试器中运行该程序,可能有助于缩小问题范围。编译时,在g++命令中添加-g -ggdb参数,然后运行程序时,使用命令gdb ./executable(可能需要先安装gdb) .) 在 gdb 提示符下,输入 run,您的程序将一直运行,直到出现段错误。然后你可以尝试找出问题所在。

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

Well, it might help narrow down the problem if you run the program in a debugger. When compiling, add the -g -ggdb arguments to the g++ command, then when running the program, use the command gdb ./executable (you may need to install gdb first.) At the gdb prompt, type run and your program will run until it segfaults. Then you can try to figure out what went wrong.

There are plenty of tutorials for using gdb (the GNU debugger) online.

白衬杉格子梦 2024-10-25 15:17:06

听起来像是二进制兼容性问题。这个SO链接可能会透露一些信息:
在 Linux 中为所有 x86 机器创建通用二进制文件

Sounds like a binary compatibility issue. This SO link might shed some light:
Creating a generic binary in linux for all x86 machines

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文