未定义的引用库android NDK

时间:2014-06-11 03:51:39

标签: android-ndk java-native-interface

我正在使用android ndk,我在构建项目时遇到了这个错误:

error: undefined reference to 'std::basic_string<char, std::char_traits<char>,         std::allocator<char> >::_Rep::_M_destroy(std::allocator<char> const&)'
/home/khoa/ndk/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: /home/khoa/Khoa/OpenCV-2.4.9-android-sdk/sdk/native/jni/../libs/armeabi-v7a/libopencv_core.a(mathfuncs.cpp.o): in function cv::magnitude(cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&):mathfuncs.cpp(.text._ZN2cv9magnitudeERKNS_11_InputArrayES2_RKNS_12_OutputArrayE+0x278): error: undefined reference to 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep::_M_destroy(std::allocator<char> const&)'
/home/khoa/ndk/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: /home/khoa/Khoa/OpenCV-2.4.9-android-sdk/sdk/native/jni/../libs/armeabi-v7a/libopencv_core.a(mathfuncs.cpp.o): in function cv::magnitude(cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&):mathfuncs.cpp(.text._ZN2cv9magnitudeERKNS_11_InputArrayES2_RKNS_12_OutputArrayE+0x2aa): error: undefined reference to 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep::_M_destroy(std::allocator<char> const&)'

在Application.mk中我添加了:

APP_STL := gnustl_static
APP_STL := -lsupc++
APP_STL := stlport_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi-v7a
APP_PLATFORM := android-8

这是我的Android.mk:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
OPENCV_LIB_TYPE:=STATIC
OPENCV_INSTALL_MODULES:=on
OPENCV_CAMERA_MODULES:=off
include /home/khoa/Khoa/OpenCV-2.4.9-android-sdk/sdk/native/jni/OpenCV.mk
LOCAL_C_INCLUDES += ${NDKROOT}/sources/cxx-stl/stlport/stlport
LOCAL_MODULE := csp
LOCAL_SRC_FILES := csp.cpp
LOCAL_LDLIBS +=  -llog -ldl
include $(BUILD_SHARED_LIBRARY)

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

除非您使用不同的工具链重建libopencv_core.a,否则应使用 gnustl_static

<强> Application.mk

APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi-v7a
APP_PLATFORM := android-9

<强> Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
OPENCV_LIB_TYPE:=STATIC
OPENCV_INSTALL_MODULES:=on
OPENCV_CAMERA_MODULES:=off
include /home/khoa/Khoa/OpenCV-2.4.9-android-sdk/sdk/native/jni/OpenCV.mk
LOCAL_MODULE := csp
LOCAL_SRC_FILES := csp.cpp
LOCAL_LDLIBS +=  -llog -ldl
include $(BUILD_SHARED_LIBRARY)

有关详细信息和可帮助您设置环境的实际屏幕截图,请参阅opecv documents

如果某些事情不明确,或者此更改无法解决所有构建问题,请不要犹豫要求提供详细信息。如果出现问题,请发布使用ndk-build V=1创建的构建日志。