Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android NDK返回一个错误";未定义对'的引用;兰特'&引用;_Android_C_Android Ndk_Android X86_Libvpx - Fatal编程技术网

Android NDK返回一个错误";未定义对'的引用;兰特'&引用;

Android NDK返回一个错误";未定义对'的引用;兰特'&引用;,android,c,android-ndk,android-x86,libvpx,Android,C,Android Ndk,Android X86,Libvpx,我正在尝试一个针对Android x86的webm decorder 我按照命令构建了这个库,得到了“libvpx.a” 当我在Windows上使用此库时,发生了一个错误 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_

我正在尝试一个针对Android x86的webm decorder

我按照命令构建了这个库,得到了“libvpx.a”

当我在Windows上使用此库时,发生了一个错误

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)

(plib/Android_x86.mk)


与(主体)最初的印象相反,这不是(直接)复制品

似乎在使用
--target=x86 android gcc
配置libvpx时,它实际上不会自动选择android编译器或尝试使用android头(与
armv7 android gcc
相反)。(事实上,如果在OS X上使用
--target=x86 android gcc
编译,它甚至不会构建linux/android二进制文件,它最终会为OS X构建二进制文件。)

相反,它像往常一样使用普通系统编译器构建正常的系统头(除非手动指定),其中包含一个普通的
rand
函数,这在Android上是不可用的。(在5.0之前的Android版本中,
stdlib.h
中的
rand
函数是一个内联函数,它实际上映射到
lrand48
函数,二进制文件最终链接到该函数)

(另外,当在arm上构建android时,它似乎不允许您选择您的目标android版本,因此,如果您的NDK包含android-21,它似乎会尝试使用该版本进行构建,这也会给您带来类似的错误,例如在中)

由于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
export PATH=/toolschains/x86-4.8/prebuild/*x86*/bin:$PATH
ASFLAGS=“-D_uuuandroid_uuuu”CROSS=i686 linux ANDROID-LDFLAGS=“--sysroot=/platforms/ANDROID-9/arch-x86”。/configure--target=x86 ANDROID gcc--extra cflags=“--sysroot=/platforms/ANDROID-9/arch-x86”--禁用示例
制作

有了这个,我就能够构建一个
libvpx.a
,它应该根据正确的头来构建,希望对您来说可以很好地工作。

该命令通过了构建,但出现了rand错误。我还不断地检查一个问题。啊,显然有一些程序集代码调用rand(),它不检查头,而是检查
\uuuuuu ANDROID\uuu
define。在configure命令上添加
ASFLAGS=“-D\uuuu ANDROID\uuuu”
(在
/configure
部分之前,交叉/LDFLAGS部分周围)和rebuild.Hey@mstorsjo我在./configure and I get
unrecogned option'-\uuuuu ANDROID\uuuuuu'
之前添加了ASFLAGS,我刚刚用绝对最新的libvpx和最新的NDK重新检查了指令,它们仍然可以正常工作(除了我必须将
x86-4.8
更改为
x86-4.9
)。请确保正确引用了参数,并且没有任何额外的空格,并且没有丢失
-D\uu安卓
中的
D
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
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)
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