Sigsegv 在针对 arm 架构重新编译时

Sigsegv when recompiled for arm architecture

本文关键字:新编译 编译 arm Sigsegv      更新时间:2023-10-16

我试图找出我在c ++ poco代码中犯了错误的地方。在 Ubuntu 14 上运行它时,程序运行正常,但是当通过 gnueabi手臂重新编译时,它只是崩溃并带有 sigsegv:

这是来自堆栈跟踪(它落在的位置)的报告:

socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(8888), sin_addr=inet_addr("192.168.2.101")}, 16) = 0
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x6502a8c4} ---
+++ killed by SIGSEGV +++

这是它落下的代码(它应该连接到 tcp 服务器):

this->address = SocketAddress(this->host, (uint16_t)this->port);
this->socket = StreamSocket(this->address); // !HERE

请注意,我正在捕获任何异常(例如 econnrefused),并且在无法连接时它会正确死亡。当它连接到服务器端时,它就会下降。

尝试启动 valgrind 时,它会因错误而中止。不知道影子内存范围是什么意思

==4929== Shadow memory range interleaves with an existing memory mapping. ASan cannot proceed correctly. ABORTING.

http://pastebin.com/Ky4RynQc 这里是完整日志

谢谢

不知道为什么,这在 ubuntu 上编译得很糟糕,但是当在 Fedora 上编译时(相同的脚本、相同的构建设置、相同的 GNU),它正在工作。

谢谢你们的评论。