web-dev-qa-db-ja.com

affdex Linuxサンプルアプリケーションをコンパイルするときのプロセス(std :: __ cxx11 :: basic_string ...)への未定義の参照

コンパイルしようとしたときに次のエラーが発生しました affdex sdkサンプルアプリケーション

Linking CXX executable video-demo
CMakeFiles/video-demo.dir/video-demo.cpp.o: In function 'main':
video-demo.cpp:(.text+0x11cb): undefined reference to 
affdex::VideoDetector::process(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
collect2: error: ld returned 1 exit status

GCC 5.2.1を使用しています

7
ahamino

私の最初の疑いは、問題は、sdkがコンパイルされたもの(gcc v4.8)よりも新しいGCCまたはGLIBCXXを使用してアプリをコンパイルしようとしていることでした。

エラーmsgは、コンパイラが見つけられない未定義の関数を参照しています。

undefined reference to `affdex::VideoDetector::process(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)

ここでの問題は、実際にはパラメーターの型定義(std :: string)です。コンパイラーは以下を探しています。

std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >

しかし、コンパイルされたライブラリのパラメーターの実際の定義タイプは..

std::basic_string<char, std::char_traits<char>, std::allocator<char> >

結局のところ、GCC 5は std :: stringおよびstd :: listの新しい実装 を導入しました。回避策 here を試して、リンクプロセスが正常に完了するかどうかを確認できますが、最も安全なオプションは、GCC 4.8の使用にフォールバックすることです。

GCC 4.8はubuntuリポジトリから取得できます。

11
ahamino