Crystax ndk を使用して Ceres-Solver をビルドしていたとき、
APP_STL := c++_static
に
APP_STL := gnustl_static
gnustl_static は Android の OpenCV と互換性があるため、libceres.a を持っています。それをプロジェクトの jni フォルダーにコピーし、次の行を Applications.mk に追加しました。
次に、Crystax ndk を使用して ndk-build を実行します (Crystax フォルダーをシステム PATH に追加しました)。
LOCAL_LDLIBS += libceres.a
LOCAL_SRC_FILES += Test.cpp
Ceres を使用した test.cpp の一部は次のとおりです。
struct CostFunctor {
template <typename T>
bool operator()(const T* const x, T* residual) const {
residual[0] = T(10.0) - x[0];
return true;
}
};
int main(int argc, char** argv) {
double x = 0.5;
const double initial_x = x;
Problem problem;
CostFunction* cost_function =
new AutoDiffCostFunction<CostFunctor, 1, 1>(new CostFunctor);
problem.AddResidualBlock(cost_function, NULL, &x);
Solver::Options options;
options.minimizer_progress_to_stdout = true;
Solver::Summary summary;
Solve(options, &problem, &summary);
return 0;
}
その後、問題が発生します(より多くのエラー メッセージが出力されます)。
/home/panxiaoyu/ceres-solver/jni/../internal/ceres/miniglog/glog/logging.h:174: error: undefined reference to 'std::__cxx11::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >::basic_stringstream(std::_Ios_Openmode)'
/opt/crystax-ndk/sources/cxx-stl/gnu-libstdc++/5/include/bits/basic_string.h:544: error: undefined reference to 'std::__cxx11::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >::~basic_stringstream()'
/opt/crystax-ndk/sources/cxx-stl/gnu-libstdc++/5/include/sstream:766: error: undefined reference to 'std::__cxx11::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::str() const'
どこが間違っていますか?
ndk の設定が間違っていますか、それとも Crystax にエラーがありますか?