2017-08-30 10 views
0

OpenCVとCaffeを使用するコードは、テストしたすべてのLinuxデバイスで動作しています。しかし、正常にインストールJETSON 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ランテストがパスされました。このsegfaultのソリューションをどのように検索しますか?

Arvids

+0

Tegraを実行するためのコードをコンパイルする必要があります。それがTegra SDKのためのものです。 – zindarod

+0

@ ZindarodすでにTegra-Jetson TK1とTX1では動作しますが、TX2では動作しません。 – arvids

答えて

0

は、どのように私はこのセグメンテーション違反に対する解決策を探していますか?

あなたはありません。

ソリューションを検索する代わりに、を見つけて問題をデバッグします。

最初の手順は、libopencv_dnn.so.3.3のデバッグ情報パッケージをインストールするか、ソースからビルドすることです。そのため、アリーナアロケータのどこにコードがクラッシュしているかを理解できます。

ちょうどmallocにクラッシュしても、問題はアリーナアロケータ自体ではなく、ユーザーコードで発生する可能性が最も高いです。この問題は、不正な書き込み(つまりランダムな破損)またはAPIの誤使用(たとえば、そのアリーナから割り当てられていないものにArena::Deallocateを呼び出すなど)の可能性があります。

P.S.このバグは他のアーキテクチャ上に存在する可能性がありますが、それ自体はまだ発表されていません。ヒープの破損のバグは、しばしばそれを行います。

+0

答えをありがとう!今のところ、私のソリューションは、このエラーを投げなかった古いバージョンのOpenCVを見つけることでした。私はおそらくそれをもう一度会い、私はあなたの提案を試みます。 – arvids

関連する問題