架构更改导致C ++程序分段错误

时间:2017-08-30 12:56:15

标签: opencv segmentation-fault

使用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 runtest已通过。我如何搜索此段错误的解决方案?

Arvids

1 个答案:

答案 0 :(得分:0)

  

如何搜索此段错误的解决方案?

你没有。

不是搜索解决方案,而是通过调试问题来自己查找

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

对于malloc中的任何崩溃,问题很可能出在用户代码中,而不是竞技场分配器本身。问题可能是杂散写入(即随机损坏),或者更可能是API误用(例如,对从该竞技场分配的内容调用Arena::Deallocate)。

P.S。该漏洞可能存在于其他架构中,但尚未公布。堆腐败错误通常会这样做。