2017-11-21 10 views
-2

ラズベリーPi2でコンパイルされた小さなアプリケーションを作成しました。プログラムはboostからプログラムオプションを使用しました。 Piが亡くなったので、私は新しいPi3でこのアプリを実行したい。コンパイル/リンクは問題なく動作する。アプリケーションを起動すると、セグメント化エラーが発生します。ブーストプログラムオプションでC++を使用すると、セグメンテーションフォールトが発生する

コードのいくつかの部分:

v_AppName = boost::filesystem::basename(argv[0]); 
po::options_description desc("Opties"); 
ProgramOptions(desc); 
po::variables_map vm; 
try 
{ 
    po::store(po::parse_command_line(argc, argv, desc), vm); 
    .... 

プログラムのオプション機能(問題が発生し一部):

void Client::ProgramOptions(boost::program_options::options_description & l_Desc) 
{ 
    l_Desc.add_options() 
    ("help,h", "Show help") 
    ("view,v", "View something") 
    ("TEST", po::value<int>(), "TEST"); 
} 

POとの最後の行::値は()それになりクラッシュ。この行を削除すると、プログラムが実行されます。

スタックトレース:[OK]を

#0 0x76f17f24 in 
    boost::program_options::value_semantic_codecvt_helper<char>::parse(boost::any&, std::vector<std::string, std::allocator<std::string> > const&, bool) const() from /usr/lib/arm-linux-gnueabihf/libboost_program_options.so.1.55.0 
No symbol table info available. 
#1 0x76f13220 in boost::program_options::store(boost::program_options::basic_parsed_options<char> const&, boost::program_options::variables_map&, bool)() 
    from /usr/lib/arm-linux-gnueabihf/libboost_program_options.so.1.55.0 
No symbol table info available. 
#2 0x0003cae0 in warmte::Client::Client (this=0x7efff618, argc=1, argv=0x7efff794) at src/client.cpp:38 
    timeout = {<boost::date_time::base_time<boost::posix_time::ptime, boost::date_time::counted_time_system<boost::date_time::counted_time_rep<boost::posix_time::millisec_posix_time_system_config> > >> = {<boost::operators_impl::less_than_comparable<boost::posix_time::ptime, boost::operators_impl::equality_comparable<boost::posix_time::ptime, boost::posix_time::ptime, boost::operators_impl::operators_detail::empty_base<boost::posix_time::ptime>, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_base<boost::posix_time::ptime>, boost::operators_impl::operators_detail::true_t>> = {<boost::operators_impl::less_than_comparable1<boost::posix_time::ptime, boost::operators_impl::equality_comparable<boost::posix_time::ptime, boost::posix_time::ptime, boost::operators_impl::operators_detail::empty_base<boost::posix_time::ptime>, boost::operators_impl::operators_detail::false_t> >> = {<boost::operators_impl::equality_comparable<boost::posix_time::ptime, boost::posix_time::ptime, boost::operators_impl::operators_detail::empty_base<boost::posix_time::ptime>, boost::operators_impl::operators_detail::false_t>> = {<boost::operators_impl::equality_comparable1<boost::posix_time::ptime, boost::operators_impl::operators_detail::empty_base<boost::posix_time::ptime> >> = {<boost::operators_impl::operators_detail::empty_base<boost::posix_time::ptime>> = {<No data fields>}, <No data fields>}, <No data fields>}, <No data fields>}, <No data fields>}, time_ = {time_count_ = { 
      value_ = 8569444509916594175}}}, <No data fields>} 
    desc = {static m_default_line_length = 80, m_caption = "Opties", m_line_length = 80, m_min_description_length = 40, 
     m_options = std::vector of length 3, capacity 4 = {{px = 0x6d168, pn = {pi_ = 0x6d980}}, {px = 0x6d188, pn = {pi_ = 0x6f588}}, {px = 0x6f628, 
      pn = {pi_ = 0x6f690}}}, belong_to_group = std::vector<bool> of length 3, capacity 32 = {0, 0, 0}, 
     groups = std::vector of length 0, capacity 0} 
    vm = <incomplete type> 
#3 0x0003c92c in main (argc=1, argv=0x7efff794) at src/client.cpp:17 
    client = {_vptr.Client = 0x57418 <vtable for warmte::Client+8>, vp_Shm = 0x0, vp_Region = 0x0, v_AppName = "warmteclient", l_Index = 0, 
     l_Result = 1} 
+1

Pi3のためにコンパイルされたライブラリではなく、古いライブラリにリンクしている可能性があります。 – chris

+0

via sudo apt-get install libboost1.50-allまたは'sudo apt-get install libboost1.55-all'をインストールします。 –

+0

私はこれをboost 1.64.0と1.65.1で試しましたが、どちらもC++ 11のフラグでビルドしています(アプリケーションでC++を使用しています) 、。どちらもうまくいきませんでした。しかし、正しいライブラリにリンクされているかどうかわからないのですが、どうすれば確認できますか? –

答えて

0

は、私が間違っているライブラリにリンクされた....ラズベリーの インストールブーストライブラリは

のlib /は/ usr/localになってしまいますので、私は追加 -L/usr/local/lib/をリンカーに変更し、 LD_LIBRARY_PATH/usr/local/lib/に変更しました。このパスがデフォルトで追加されない理由はまだ分かりません

関連する問題