1

我在编译时遇到了一些麻烦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 库和工具链,但没有运气。我还为 clang 找到了一些其他特定的东西,但仍然不起作用。

安卓.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)

应用程序.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

我不知道在这里做什么,求助!

4

0 回答 0