链接器错误与外部NDK库需要'cpufeatures'

时间:2018-04-14 09:33:11

标签: android android-ndk linker freeimage

我正在尝试构建并将freeimage链接到android项目。我很接近但是我正在绊倒那个库中的一些链接器错误。

我正在使用此回购:https://github.com/jamcar23/FreeImage-Android/blob/master/jni/freeimage/Android.mk

Freeimage使用内部NDK库'cpufeatures'来使用xeon芯片组功能。在项目的'android.mk'中,有一个对cpufeatures库的引用:

LOCAL_STATIC_LIBRARIES := cpufeatures

和我的库,它静态链接到这个,在该项目的android.mk中的LOCAL_STATIC_LIBRARIES语句中还包含cpufeatures:

LOCAL_STATIC_LIBRARIES := tinyxml freetype2 bullet freeimage cpufeatures

也在我的android.mk中,我链接像这样的freeimage:

#####FREEIMAGE_LIBRARY_DECLARATION##########
include $(CLEAR_VARS)
LOCAL_PATH = $(TPLIBROOT)/FreeImage-Android
LOCAL_MODULE := freeimage
LOCAL_EXPORT_C_INCLUDES := include
LOCAL_SRC_FILES := obj/local/$(TARGET_ARCH_ABI)/libFreeImage.a
include $(PREBUILT_STATIC_LIBRARY)
###############################################

,注意到我之前关于NDK的问题,应该关注特定的体系结构(我使用所有可用的体系结构构建freeimage)

freeimage .a和.so库似乎构建正常,但在构建.so时链接到我的库,我收到此错误:

[armeabi-v7a] SharedLibrary  : libAnthracite.so
jni/freeimage/Source/LibWebP/./src/dsp/dsp.cpu.c:108: error: undefined reference to 'android_getCpuFamily'
jni/freeimage/Source/LibWebP/./src/dsp/dsp.cpu.c:109: error: undefined reference to 'android_getCpuFeatures'
jni/freeimage/Source/LibWebP/./src/dsp/dsp.dec.c:745: error: undefined reference to 'VP8DspInitNEON'

这是奇怪的,因为两个库都链接cpufeatures,所以它确实应该在那里。

我正在宣布

APP_PLATFORM := android-14
APP_STL := gnustl_static

在两个项目的application.mk文件中。 另外,我尝试将'LOCAL_STATIC_LIBRARIES'放在文件中的不同位置,并按不同顺序链接库,尽管这只是猜测。 有人知道可能导致这些链接器错误的原因吗?

2 个答案:

答案 0 :(得分:1)

请按照official guide添加cpu功能。 TL; NR:将$(call import-module,android/cpufeatures)添加到您的 Android.mk

答案 1 :(得分:0)

我终于通过确保我的所有应用程序来实现这一目标。我使用的所有四个第三方库的文件共享一个如下所示的公共基本文件:

APP_PLATFORM := android-15
APP_STL      := c++_static
APP_ABI      := all    
APP_OPTIM    := release
APP_SHORT_COMMANDS := true

这使得它们更容易保持一致,确保它们全部针对相同的库构建。 另外,我从' gnustl_static'更改了STL实现。到&#c; c ++ _ static'