2016-12-30 371 views
0

我正在嘗試構建一個arm64版本的libcurl 7.50.3,使用Android NDK r13b,目標是Android API 19.我設法使armv7工作,但是我一直使用arm64得到錯誤。這是我的出口標誌:構建android arm64的libcurl

NDK_ROOT="/opt/android-ndk-r13b" 
export SYSROOT="${NDK_ROOT}/platforms/android-19/arch-arm" 
export CPPFLAGS="-I${SYSROOT}/usr/include --sysroot=${SYSROOT}" 
export CFLAGS="--sysroot=${SYSROOT}" 
export CC=$(${NDK_ROOT}/ndk-which gcc) 
export LD=$(${NDK_ROOT}/ndk-which ld) 
export CPP=$(${NDK_ROOT}/ndk-which cpp) 
export CXX=$(${NDK_ROOT}/ndk-which g++) 
export AS=$(${NDK_ROOT}/ndk-which as) 
export AR=$(${NDK_ROOT}/ndk-which ar) 
export RANLIB=$(${NDK_ROOT}/ndk-which ranlib) 

我的配置呼叫

LIBS="-ldl -lssl -lcrypto" ./configure \ 
--disable-ftp \ 
--disable-file \ 
--disable-ldap \ 
--disable-dict \ 
--disable-telnet \ 
--disable-gopher \ 
--disable-tftp \ 
--disable-manual \ 
--disable-shared \ 
--disable-imap \ 
--disable-pop3 \ 
--disable-rtsp \ 
--disable-smb \ 
--disable-smtp \ 
--enable-threaded-resolver \ 
--enable-ipv6 \ 
--with-ssl=${SSL_DIR} \ 
--host=aarch64-linux-android \ 
--target=aarch64-linux-android \ 

然後make。我已經嘗試將主機和目標設置爲arm-linux-androideabi,但我仍然收到相同的錯誤。 config.log說

configure:4488: ./conftest 
./configure: line 4490: ./conftest: cannot execute binary file: Exec format error 
configure:4492: $? = 126 
configure:4499: error: in `/home/sossisos/build_curl_android/curl_7.50.3': 
configure:4501: error: cannot run C compiled programs. 
If you meant to cross compile, use `--host'. 
See `config.log' for more details 

我錯過了什麼嗎?我是否誤解了要使用的目標或主機?

+0

當使用Autotools時,我相信你需要使用'--target'進行交叉編譯。 '--host'是你正在建造的機器。如果主機=目標(您正在Aarch64機器上構建),則不要指定任何一個。 '--target = aarch64-linux-android'可能不是有效的目標,'--host = aarch64-linux-android'可能是錯誤的。據我所知,[無法讓Autotools告訴你有效的三胞胎](https://lists.gnu.org/archive/html/autoconf/2015-02/msg00006.html)。另請參閱[使用Autoconf針對ARM進行交叉編譯](http://stackoverflow.com/q/15234959)。 – jww

+3

這是不正確的。 --build是你正在運行的系統,--host是你希望編譯的程序運行的系統,--target用於* build *交叉編譯器。有關完整的解釋,請參閱我的舊博客文章https://blog.flameeyes.eu/2009/01/the-canonical-target/。 –

+0

除了Diego所說的之外,還需要將'SYSROOT'更改爲'android-21/arch-arm64',以便鏈接成功。 (在其他體系結構上支持API 19並不重要,因爲在該版本中出現了ABI,所以沒有任何arm64設備運行的API比API 21少)。 – mstorsjo

回答

3

請確保您使用--host(設置爲arm64/android)和--build(設置爲您的系統,可能是x86_64-pc-linux-gnu)調用./configure。後者應該被自動檢測,但並不總是如此。這樣腳本就會知道你正在交叉編譯,並且不會嘗試執行它構建的程序。

相關問題