我正在尝试使用libvpx用于Android x86的webm装饰器。
我通过遵循以下命令构建了库,并得到了“ libvpx.a”。
../configure --target=x86-android-gcc --disable-vp8-encoder --disable-vp9-encoder --disable-examples --sdk-path=$ANDROID_NDK_ROOT --enable-pic --enable-postproc
当我在Windows上通过ndk-build使用该库时,发生了错误。
C:/android/[project]/jni/../plib/libvpx.a(postproc_mmx.asm.o)(.text+0x1c8): error: undefined reference to 'rand'
C:/android/[project]/jni/../plib/libvpx.a(postproc_sse2.asm.o)(.text+0x65c): error: undefined reference to 'rand'
collect2.exe: error: ld returned 1 exit status
用于armeabi的libvpx.a没有发生错误。有人不知道解决方法吗?
(jni / Android.mk)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := sublib
LOCAL_SRC_FILES := sublib.cpp
LOCAL_LDLIBS := -llog
LOCAL_STATIC_LIBRARIES := libvpx_pre
include $(BUILD_SHARED_LIBRARY)
include $(LOCAL_PATH)/../plib/Android_x86.mk
(plib / Android_x86.mk)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libvpx_pre
LOCAL_SRC_FILES := libvpx.a
LOCAL_STATIC_LIBRARIES := cpufeatures
include $(PREBUILT_STATIC_LIBRARY)
$(call import-module,android/cpufeatures)
与(来自主题的)最初印象相反,这不是(直接)不能加载库的副本:reloc_library [1285]:无法找到'rand'。
看来,使用配置libvpx时--target=x86-android-gcc
,它实际上并不会自动选择android编译器或尝试使用android标头(与其对标相反armv7-android-gcc
)。(实际上,如果您--target=x86-android-gcc
在OS X上进行编译,它甚至不生成linux / android二进制文件,最终将为OS X生成二进制文件。)
取而代之的是,它使用普通的系统编译器以通常的方式构建,并带有普通的系统标头(除非您手动指定它们),标头包含普通的rand
函数,而Android上则不提供。(在Android 5.0之前的版本中,rand
in函数stdlib.h
是一个内联函数,实际上会映射到该lrand48
函数,二进制文件最终链接到该函数)。
(另外,在为手臂构建android时,似乎不允许您选择要定位的android版本,因此,如果您的NDK包含android-21,似乎它将尝试以此构建,这可以也给您类似的错误,例如在无法加载库中:reloc_library [1285]:无法找到'rand'。)
由于configure script magic似乎没有为x86 android构建所需的正确设置(就像对arm一样),因此您应该可以自己进行设置,这需要设置更多参数:
export PATH=<NDK>/toolchains/x86-4.8/prebuilt/*x86*/bin:$PATH
ASFLAGS="-D__ANDROID__" CROSS=i686-linux-android- LDFLAGS="--sysroot=<NDK>/platforms/android-9/arch-x86" ./configure --target=x86-android-gcc --extra-cflags="--sysroot=<NDK>/platforms/android-9/arch-x86" --disable-examples
make
有了这个,我就能建立一个libvpx.a
应该针对正确的标头建立的,希望对您来说可以正常工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句