2017-08-30 112 views
0

使用OpenCV和Caffe的代碼適用於我測試過的所有Linux設備。然而啓動它在成功安裝杰特森TX2導致分段錯誤與該堆棧跟蹤:體系結構更改導致C++程序段分割錯誤

[email protected]:~/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>, [email protected]=1, 
    [email protected]=0x7ffffff478, [email protected]=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

+0

您需要編譯Tegra的代碼才能在其上運行。這就是Tegra SDK的用武之地。 – zindarod

+0

@ Zindarod它已經運行在Tegra - Jetson TK1和TX1上,但不在TX2上。 – arvids

回答

0

我如何尋找一個解決這個段錯誤?

你不知道。

而不是尋找一個解決方案,你自己找到它通過調試問題。

第一步應該是爲libopencv_dnn.so.3.3安裝調試信息包,或者從源代碼構建調試信息包,以便您瞭解Arena分配器中代碼崩潰的位置。

只要在malloc有任何崩潰,問題很可能在用戶代碼中,而不是Arena分配器本身。問題可能是流浪的寫入(即隨機損壞),或者更可能是API錯誤使用(例如,在未從該競技場分配的東西上調用Arena::Deallocate)。

P.S.該錯誤可能存在於其他架構上,但尚未公佈。堆腐敗錯誤往往這樣做。

+0

謝謝你的回答!現在我的解決方案是找到一個沒有拋出這個錯誤的舊版本的OpenCV。我可能會再次見面,然後我會嘗試你的建議。 – arvids