簡體   English   中英

如何更新Android NDK的GNU鏈接器?

[英]How do you update the GNU linker for an Android NDK?

我正在使用NDK r12b進行原生Android項目。 該NDK(以及從那時以來的所有其他產品)都帶有預構建的GNU鏈接程序2.25版。 最近,我們嘗試提取我們項目的許多子模塊,這些子模塊引入了一個構建錯誤,看起來像是由ld中此錯誤引起的。

構建錯誤輸出:

/opt/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: internal error in do_relocate_sections, at /usr/local/google/buildbot/src/android/gcc/toolchain/build/../binutils/binutils-2.25/gold/reloc.cc:953
collect2: error: ld returned 1 exit status

我以為我會嘗試更新鏈接器,但沒有運氣找到預建的二進制文件。 因此,我無意中嘗試自己編譯ld / binutils。 我的Google技能使我失敗了,或者執行此操作的文檔確實很少,或者假定用戶具有許多我所不具備的入門知識。

使用target = arm-linux構建binutils 2.29.1時,我的應用程序因以下結果而生成錯誤:

/opt/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: unrecognised emulation mode: armelf_linux_eabi
Supported emulations: armelf_linux armelf armelfb armelfb_linux
collect2: error: ld returned 1 exit status

作為參考,當前版本的ld的-V輸出為:

me@linux-vm:/opt/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/arm-linux-androideabi/bin$ ./ld-2.25 -V
GNU gold (binutils-2.25-0666073 2.25.51.20141117) 1.11
Supported targets:
   elf64-littleaarch64
   elf64-bigaarch64
   elf32-littleaarch64
   elf32-bigaarch64
   elf64-tradlittlemips
   elf32-tradlittlemips-nacl
   elf64-tradbigmips
   elf32-tradlittlemips-nacl
   elf32-tradlittlemips
   elf32-tradlittlemips-nacl
   elf32-tradbigmips
   elf32-tradlittlemips-nacl
   elf32-tilegx-be
   elf64-tilegx-be
   elf32-tilegx-le
   elf64-tilegx-le
   elf32-bigarm
   elf32-bigarm-nacl
   elf32-littlearm
   elf32-littlearm-nacl
   elf64-powerpcle
   elf64-powerpc
   elf32-powerpcle
   elf32-powerpc
   elf64-sparc
   elf32-sparc
   elf32-x86-64
   elf32-x86-64-freebsd
   elf32-x86-64-nacl
   elf64-x86-64
   elf64-x86-64-freebsd
   elf64-x86-64-nacl
   elf32-i386
   elf32-i386-freebsd
   elf32-i386-nacl
  Supported emulations:
   aarch64_elf64_le_vec
   aarch64_elf64_be_vec
   aarch64_elf32_le_vec
   aarch64_elf32_be_vec
   elf64-tradlittlemips
   elf32-tradlittlemips-nacl
   elf64-tradbigmips
   elf32-tradlittlemips-nacl
   elf32-tradlittlemips
   elf32-tradlittlemips-nacl
   elf32-tradbigmips
   elf32-tradlittlemips-nacl
   elf32tilegx_be
   elf64tilegx_be
   elf32tilegx
   elf64tilegx
   armelfb
   armelfb_nacl
   armelf
   armelf_nacl
   elf64lppc
   elf64ppc
   elf32lppc
   elf32ppc
   elf64_sparc
   elf32_sparc
   elf32_x86_64
   elf32_x86_64_nacl
   elf_x86_64
   elf_x86_64_nacl
   elf_i386
   elf_i386_nacl

因此,顯然我缺少一些重要的配置參數。 我還嘗試使用較舊的(r8e)Android NDK的build / tools / build-gcc.sh腳本來構建整個編譯器工具鏈,但使用較新的binutils版本。 這導致未知的構建錯誤:

me@linux-vm:/opt/android-ndk-r8e/build/tools$ ./build-gcc.sh --gmp-version=5.0.5 --mpfr-version=3.1.1 --mpc-version=1.0.1 --binutils-version=2.26 
$(pwd)/src $(pwd) arm-linux-androideabi-4.7
To follow build in another terminal, please use: tail -F /tmp/ndk-me/build/toolchain/config.log
Using C compiler: gcc -m32
Using C++ compiler: g++ -m32
Sysroot  : Copying: /opt/android-ndk-r8e/platforms/android-9/arch-arm --> /tmp/ndk-me/build/toolchain/prefix/sysroot
Configure: arm-linux-androideabi-4.7 toolchain build
Building : arm-linux-androideabi-4.7 toolchain [this can take a long time].
Error while building toolchain. See /tmp/ndk-me/build/toolchain/config.log

config.log的最后一個條目:

ar cru libintl.a bindtextdom.o dcgettext.o dgettext.o gettext.o finddomain.o loadmsgcat.o localealias.o textdomain.o l10nflist.o explodename.o dcigettext.o dcngettext.o dngettext.o ngettext.o plural.o plural-exp.o localcharset.o relocatable.o localename.o log.o osdep.o intl-compat.o
ranlib libintl.a
make[1]: Leaving directory `/tmp/ndk-me/build/toolchain/libbfd-binutils-2.26/intl'

在這一點上,我只是在打轉輪胎,並嘗試通過配置參數和源程序包版本的不同組合強行成功。 好像添加對armelf_linux_eabi的仿真支持一樣簡單,但是就像我說的那樣,我沒有找到任何顯示該操作方法的文檔或指南。 當然,在某個地方可以找到GNU向導,誰可以指出我的更好方法? 任何幫助表示贊賞!

我會先嘗試--enable-targets=all 這是一個很大的錘子,但是也許它可以幫助您避免弄清楚所需的確切目標三元組(我猜是arm-unknown-linux-eabi )。

暫無
暫無

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

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