Android — компиляция CLANG с c ++ 11 не работает на 32-битных ABI

У меня возникают проблемы с компиляцией android-ndk-r12b который идет с Clang 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, а также набор инструментов без удачи.
Я нашел также некоторые другие конкретные вещи для лязг, но подоконник не работает.

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

Я понятия не имею, что здесь делать, помогите!

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]