lundi 25 juillet 2016

CLANG compiling with c++11 doesn't work on 32-bit ABIs

I'm experiencing some troubles compiling with android-ndk-r12b which comes with Clang 3.8.2659 and when it compiles dlib static library (which requires c++11 features) get this error only when targeting armeabi-v7a and 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__;

And instead is completely fine if I compile only for x86_64 and arm-v8a!

I've searched and tried many different solutions: changing stl library and also toolchain with no luck. I've found also some other specific stuff for clang, but sill not working.

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

I've got no idea about what to do here, help!

Aucun commentaire:

Enregistrer un commentaire