簡體   English   中英

Android NDK返回錯誤“未定義引用'rand'”

[英]Android NDK returns an error “undefined reference to 'rand'”

我正在嘗試使用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

libmepx.a for armeabi沒有出現錯誤。 有人不知道解決方案嗎?

(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'

似乎在使用--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.hrand函數是一個實際映射到lrand48函數的內聯函數,這是二進制文件最終鏈接到的函數)。

(此外,當為手機上的Android構建時,它似乎不允許你選擇你所針對的Android版本,所以如果你的NDK包含android-21,它似乎會嘗試使用它構建,這可以也會給你類似的錯誤,比如在無法加載庫中:reloc_library [1285]:找不到'rand' 。)

由於配置腳本魔術似乎沒有為構建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 ,它應該針對正確的頭文件構建,希望這對你來說很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM