使用c ++ 11进行CLANG编译并不适用于32位ABI

时间:2016-07-25 10:37:49

标签: android c++ c++11 android-ndk android.mk

我遇到了android-ndk-r12bClang 3.8.2659一起编译时出现的一些问题,当它编译dlib静态库(需要c ++ 11功能)时才会出现此错误定位armeabi-v7a和x86

<my-path>/geometry/point_transforms.h:235:85: error: no member named 'round' in namespace 'std'
        return centered_rect(center(temp), std::round(temp.width()*scale), std::round(temp.height()*scale));
C:/AndroidNDK/android-ndk-r12b/build//../platforms/android-24/arch-arm/usr/include\math.h:452:13: note: 'roundl' declared here
long double     roundl(long double) __NDK_FPABI_MATH__;

如果我仅为x86_64和arm-v8a编译,那么完全没问题。

我已经搜索并尝试了许多不同的解决方案:更改stl库以及工具链而没有运气。 我还发现了其他一些specific stuff for clang,但不起作用。

Android.mk

--- Android.mk ---
LOCAL_PATH := $(call my-dir)

#========================== dlib static library ===================================
include $(CLEAR_VARS)
LOCAL_MODULE := dlib
LOCAL_C_INCLUDES := $(DLIB_DIR)
LOCAL_EXPORT_C_INCLUDES := $(DLIB_DIR)

LOCAL_SRC_FILES += \
    $(DLIB_DIR)/dlib/threads/threads_kernel_shared.cpp \
    $(DLIB_DIR)/dlib/entropy_decoder/entropy_decoder_kernel_2.cpp \
    $(DLIB_DIR)/dlib/base64/base64_kernel_1.cpp \
    $(DLIB_DIR)/dlib/threads/threads_kernel_1.cpp \
    $(DLIB_DIR)/dlib/threads/threads_kernel_2.cpp

include $(BUILD_STATIC_LIBRARY)

#========================== miniglog static library ================================
include $(CLEAR_VARS)
LOCAL_MODULE := miniglog
LOCAL_EXPORT_C_INCLUDES := $(MINIGLOG_DIR)
LOCAL_C_INCLUDES := $(MINIGLOG_DIR)
LOCAL_SRC_FILES := $(MINIGLOG_DIR)/glog/logging.cc

include $(BUILD_STATIC_LIBRARY)

#========================== user defined jni shared library ========================
include $(CLEAR_VARS)
OpenCV_INSTALL_MODULES := on
OPENCV_CAMERA_MODULES := off
OPENCV_LIB_TYPE := STATIC
include $(OPENCV_ANDROID_SDK)/sdk/native/jni/OpenCV.mk

LOCAL_MODULE := head_pose_det

LOCAL_C_INCLUDES +=  \
          $(OPENCV_ANDROID_SDK)/sdk/native/jni/include

LOCAL_SRC_FILES += \
    jni_head_pose_det.cpp \
    imageutils_jni.cpp \
    common/rgb2yuv.cpp \
    common/yuv2rgb.cpp

LOCAL_LDLIBS += -lm -llog -ldl -lz -ljnigraphics

# import static libraries
LOCAL_STATIC_LIBRARIES += dlib
LOCAL_STATIC_LIBRARIES += miniglog

ifeq ($(TARGET_ARCH_ABI), armeabi-v7a)
    LOCAL_ARM_MODE := arm
    LOCAL_ARM_NEON := true
# Using the next two lines as suggested in the guide, nothing changes though
    LOCAL_CFLAGS= -march=armv7-a -mfloat-abi=softfp -mfpu=neon
    LOCAL_LDFLAGS= -march=armv7-a -Wl,--fix-cortex-a8
endif

include $(BUILD_SHARED_LIBRARY)

Application.mk

--- Application.mk ---
NDK_TOOLCHAIN_VERSION := clang
APP_ABI := arm64-v8a x86_64 
# NOT WORKING FOR armeabi-v7a x86
APP_CPPFLAGS := -std=c++11 -frtti -fexceptions
APP_PLATFORM := android-8
APP_STL := gnustl_static

我不知道该怎么办,帮忙!

0 个答案:

没有答案