【问题标题】:cross compile: error adding symbols: File in wrong format交叉编译:添加符号时出错:文件格式错误
【发布时间】:2016-11-23 11:59:20
【问题描述】:

我正在尝试为 arm-v8 交叉编译 fdk-aac。

这是我的构建脚本:

#!/bin/sh

NDK_HOME=/home/ubuntu/android-ndk-r12b

INSTALL_DIR=/home/ubuntu/compiled
SYSROOT=$NDK_HOME/platforms/android-16/arch-arm/
TOOLCHAIN=$NDK_HOME/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-

CC={$CROSS_PREFIX}gcc
CXX={$CROSS_PREFIX}g++
CPP={$CROSS_PREFIX}cpp
CXXCPP={$CROSS_PREFIX}cpp

./configure \
--prefix=$INSTALL_DIR \
--with-sysroot=$SYSROOT \
--host=aarch64 \
--enable-shared \
--with-pic=no \
CC="${CROSS_PREFIX}gcc --sysroot=$SYSROOT" \
CXX="${CROSS_PREFIX}g++ --sysroot=$SYSROOT" \
RANLIB="${CROSS_PREFIX}ranlib" \
AR="${CROSS_PREFIX}ar" \
STRIP="${CROSS_PREFIX}strip" \
NM="${CROSS_PREFIX}nm" \
LD="${CROSS_PREFIX}ld --sysroot=$SYSROOT" \
CFLAGS="-O2 $OPTIMIZE_CFLAGS --sysroot=$SYSROOT" \
CXXFLAGS="-O2 $OPTIMIZE_CFLAGS --sysroot=$SYSROOT"

#make
#make install

makemake install 没用,因为./configure 失败并且错误信息要求我检查config.log

configure:3243: checking whether the C compiler works
configure:3265: /home/ubuntu/android-ndk-r12b/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-gcc --sysroot=/home/ubuntu/android-ndk-r12b/platforms/android-16/arch-arm/ -O2  --sysroot=/home/ubuntu/android-ndk-r12b/platforms/android-16/arch-arm/   conftest.c >&5
/home/ubuntu/android-ndk-r12b/platforms/android-16/arch-arm/usr/lib/crtbegin_dynamic.o: error adding symbols: File in wrong format
collect2: error: ld returned 1 exit status
configure:3269: $? = 1
configure:3307: result: no
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "fdk-aac"
| #define PACKAGE_TARNAME "fdk-aac"
| #define PACKAGE_VERSION "0.1.4"
| #define PACKAGE_STRING "fdk-aac 0.1.4"
| #define PACKAGE_BUGREPORT "http://sourceforge.net/projects/opencore-amr/"
| #define PACKAGE_URL ""
| #define PACKAGE "fdk-aac"
| #define VERSION "0.1.4"
| /* end confdefs.h.  */
| 
| int
| main ()
| {
| 
|   ;
|   return 0;
| }
configure:3312: error: in `/home/ubuntu/fdk-aac-0.1.4':
configure:3314: error: C compiler cannot create executables

我不知道构建脚本的哪个配置错误。这是我第一次为 ARM64 交叉编译库...

【问题讨论】:

  • “arch-arm”肯定是 64 位的 sysroot,而不是 32 位的吗?
  • @Notlikethat,arch-arm 是一个 32 位平台。在我的 NDK 副本中,我没有在 android-16 下看到 arch-arm64,但对于 API 级别 21+,该平台确实存在。
  • 可以肯定的是,您可以使用 readelf/objdump/etc 检查crtbegin_dynamic.o 的标题。 - 如果是 32 位 ARM 代码,则需要 32 位 ARM 工具链。请注意,如今 64 位机器运行 64 位内核但运行 32 位用户空间的情况并不少见,尤其是在 Android 中(为了兼容性,所有 32 位的东西无论如何都必须在那里,并且必须有 64 -bit 版本会占用大量空间)。

标签: android cross-compiling arm64


【解决方案1】:

我已经添加了这两个语句 "SET(CMAKE_C_COMPILER "mips-linux-uclibc-gnu-gcc") SET(CMAKE_CXX_COMPILER "mips-linux-uclibc-gnu-g++") " 并构建成功,也许对你有帮助。

【讨论】:

    猜你喜欢
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多