【问题标题】:Architecture change caused C++ program segmentation fault架构更改导致 C++ 程序分段错误
【发布时间】:2017-08-30 12:56:15
【问题描述】:

使用 OpenCV 和 Caffe 的代码已在我测试过的所有 Linux 设备上运行。但是,在成功安装的 Jetson TX2 上启动它会导致此堆栈跟踪出现分段错误:

nvidia@tegra-ubuntu:~/Desktop$ gdb ./main
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1
This GDB was configured as "aarch64-linux-gnu".    
Reading symbols from ./main...done.
(gdb) r
Starting program: /home/nvidia/Desktop/main
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/aarch64-linux-gnu/libthread_db.so.1".Program received signal SIGSEGV, Segmentation fault.
0x0000007fb5e5d14c in google::protobuf::Arena::AllocateAligned(std::type_info const*, unsigned long) () from /usr/local/lib/libopencv_dnn.so.3.3
(gdb) bt
#0  0x0000007fb5e5d14c in google::protobuf::Arena::AllocateAligned(std::type_info const*, unsigned long) () from /usr/local/lib/libopencv_dnn.so.3.3
#1  0x0000007fb5e5d248 in google::protobuf::Arena::AddListNode(void*, void ()(void)) ()
  from /usr/local/lib/libopencv_dnn.so.3.3
#2  0x0000007fb5eaaf34 in google::protobuf::FileDescriptorProto::New(google::protobuf::Arena*) const [clone .localalias.409] () from /usr/local/lib/libopencv_dnn.so.3.3
#3  0x0000007fad71bfc4 in google::protobuf::MessageLite::ParseFromArray(void const*, int)
   () from /usr/lib/aarch64-linux-gnu/libprotobuf.so.9
#4  0x0000007fad763e70 in google::protobuf::EncodedDescriptorDatabase::Add(void const*, int) () from /usr/lib/aarch64-linux-gnu/libprotobuf.so.9
#5  0x0000007fad726d30 in google::protobuf::DescriptorPool::InternalAddGeneratedFile(void const*, int) () from /usr/lib/aarch64-linux-gnu/libprotobuf.so.9
#6  0x0000007fad7560bc in google::protobuf::protobuf_AddDesc_google_2fprotobuf_2fdescriptor_2eproto() () from /usr/lib/aarch64-linux-gnu/libprotobuf.so.9
#7  0x0000007fb7fdfb18 in call_init (l=<optimized out>, argc=argc@entry=1,
   argv=argv@entry=0x7ffffff478, env=env@entry=0x7ffffff488) at dl-init.c:72
#8  0x0000007fb7fdfc60 in call_init (env=0x7ffffff488, argv=0x7ffffff478, argc=1,
   l=<optimized out>) at dl-init.c:30
#9  _dl_init (main_map=0x7fb8000190, argc=1, argv=0x7ffffff478, env=0x7ffffff488)
   at dl-init.c:120
#10 0x0000007fb7fd2d44 in _dl_start_user () from /lib/ld-linux-aarch64.so.1

Protobuf 出现了很多,所以我安装了 protobuf 3.3 并重新编译了所有内容,但这也无济于事。使用 OpenCV 的简单代码示例可以正常工作,并且通过了 Caffe 运行测试。我如何搜索此段错误的解决方案?

阿维德

【问题讨论】:

  • 您需要编译代码以供 Tegra 运行。这就是 Tegra SDK 的用途。
  • @Zindarod 它已经在 Tegra - Jetson TK1 和 TX1 上运行,但不在 TX2 上。

标签: opencv segmentation-fault


【解决方案1】:

如何寻找解决此段错误的方法?

你没有。

您可以通过调试问题自己找到解决方案,而不是寻找解决方案。

第一步应该是为libopencv_dnn.so.3.3 安装调试信息包,或者从源代码构建它,这样您就可以了解您的代码在 Arena 分配器中的哪个位置崩溃了。

malloc 出现任何崩溃,问题很可能出在用户代码中,而不是 Arena 分配器本身。问题可能是杂散写入(即随机损坏),或者更可能是 API 滥用(例如,在不是从该 Arena 分配的东西上调用 Arena::Deallocate)。

附:该错误可能存在于其他架构上,但尚未公布。堆损坏错误通常会这样做。

【讨论】:

  • 感谢您的回答!现在我的解决方案是找到一个没有抛出这个错误的旧版本的 OpenCV。我可能会再次遇到它,然后我会尝试你的建议。
猜你喜欢
  • 1970-01-01
  • 2023-01-03
  • 1970-01-01
  • 2021-10-02
  • 1970-01-01
  • 2021-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多