android sdk linux 16.04 编译 兼容性出问题 x86_64

在Ubuntu 16.04上编译Android SDK时遇到错误,由于不支持的重定位导致编译失败。错误信息涉及到libcompiler_rt_intermediates的静态库。解决方法是在`build/core/clang/Host_x86_common.mk`文件中添加一行代码,以指定GCC工具链路径,从而修复编译问题。
编译出现的错误:
/home/elinksoft/code/8163/alps/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6/bin/../lib/gcc/x86_64-linux/4.6/../../../../x86_64-linux/bin/ld: error: out/host/linux-x86/obj32/STATIC_LIBRARIES/libcompiler_rt_intermediates/libcompiler_rt.a(eprintf.o): unsupported reloc 43 against global symbol stderr
external/compiler-rt/lib/builtins/eprintf.c:32: error: unsupported reloc 43
collect2: ld returned 1 exit status
build/core/host_shared_library_internal.mk:44: recipe for target 'out/host/linux-x86/obj32/lib/libcompiler_rt.so' failed
make: *** [out/host/linux-x86/obj32/lib/libcompiler_rt.so] Error 1
make: *** Waiting for unfinished jobs....
host C++: libnativehelper_32 <= libnativehelper/JNIHelp.cpp
make: *** wait: No child processes. Stop.

#### make failed to build some targets (34:11 (mm:ss)) ####

解决办法:
修改:
在build/core/clang/Host_x86_common.mk
在第7 - 11行左右位置
ifeq ($(HOST_OS),linux)
CLANG_CONFIG_x86_LINUX_HOST_EXTRA_ASFLAGS := \
--gcc-toolchain=$($(clang_2nd_arch_prefix)HOST_TOOLCHAIN_FOR_CLANG) \
--sysroot=$($(clang_2nd_arch_prefix)HOST_TOOLCHAIN_FOR_CLANG)/sysroot \
-B$($(clang_2nd_arch_prefix)HOST_TOOLCHAIN_FOR_CLANG)/x86_64-linux/bin \
-no-integrated-as
添加 -B$($(clang_2nd_arch_prefix)HOST_TOOLCHAIN_FOR_CLANG)/x86_64-linux/bin \ 这行
1 / 6 1 / 6 SERIALLINK GCC 交叉编译 V1.02 / 6 2 / 6 GCC 交叉编译 WEB: www.seriallink.net E-Mail: info@seriallink.net 1.准备工作 一个 linux 系统, 配置可参考如下(linux 16.04 或以上版本) . 2.解压交叉工具链压缩包 在项目目录执行以下命令, 解压包到 opt 目录下 tar jxvf /root/OpenWrt-Toolchain-ipq-ipq60xx_64_gcc-5.2.0_musl-1.1.16.Linux-x86_64.tar.bz2 -C /opt/ 3.添加环境变量 添加环境变量: export PATH=你的交叉工具链目录:$PATH, 例如 export PATH=/opt/OpenWrt-Toolchain-ipq-ipq60xx_64_gcc-5.2.0_musl-1.1.16.Linux-x86_64/ toolchain-aarch64_cortex-a53_gcc-5.2.0_musl-1.1.16/bin:$PATH 4.验证是否安装成功 aarch64-openwrt-linux-gcc -v3 / 6 3 / 6 GCC 交叉编译 WEB: www.seriallink.net E-Mail: info@seriallink.net 5.解压 SDK 压缩包 ①执行 tar jxvf /root/OpenWrt-SDK-ipq-ipq60xx_64_gcc-5.2.0_musl-1.1.16.Linux-x86_64.tar.bz2 -C /opt/ ②进入 SDK 根目录, cd /opt/OpenWrt-SDK-ipq-ipq60xx_64_gcc-5.2.0_musl-1.1.16.Linux-x86_64/ ③执行 ls 可以看到有 build_dir、 staging_dir 和 package 等目录 ④同样添加至环境变量 export STAGING_DIR=/opt/OpenWrt-SDK-ipq-ipq60xx_64_gcc-5.2.0_musl-1.1.16.Linux-x86_64/staging_dir ⑤进入 package 目录, 创建 HelloWorld 项目文件夹并在文件夹中创建一个 src 文件夹存放项目源码 cd package mkdir -p Helloworld cd Helloworld mkdir -p src ⑥将项目的源码放至 src 下 ⑦进入 src 目录, 开始单步编译 cd src aarch64-openwrt-linux-musl-gcc main.c -o HelloWorld ⑧编译成功在当前目录中会编译完的程序4 / 6 4 / 6 GCC 交叉编译 WEB: www.seriallink.net E-Mail: info@seriallink.net 6.将 Helloworld 放到路由器运行 ①开启设备的 ssh 功能 登录路由器管理页面, 点击菜单: 系统——日期和时间5 / 6 5 / 6 GCC 交叉编译 WEB: www.seriallink.net E-Mail: info@seriallink.net ②上传刚编译好的 Helloworld 程序放到设备的/usr/sbin(或其他目录)目录下(这里我已将刚刚编译好的 HelloWorld 程序从 SDK 中下载到本地 D 盘上) scp -o HostKeyAlgorithms=+ssh-rsa -O D:/HelloWorld admin@192.168.2.1:/usr/sbin(登录密码为路由器页面登 录密码, 默认 admin) 如果提示如下错误, 执行 ssh-keygen -R 192.168.2.1 清空以下密码表6 / 6 6 / 6 GCC 交叉编译 WEB: www.seriallink.net E-Mail: info@seriallink.net ③登录到路由器后台( 登录密码为路由器页面登录密码, 默认 admin) , 执行 chmod +x /usr/sbin/HelloWorld 修改程序执行权限, 就可以在设备的任意路径下直接运行 HelloWorld 了 ssh -o HostKeyAlgorithms=+ssh-rsa admin@192.168.2.1 chmod +x /usr/sbin/HelloWorld HelloWorld ④如果程序文件放到其他目目录运行, 运行时需要加上目录所在的路径 chmod +x /sda2/HelloWorld /sda2/HelloWorld 感谢您对 SERIALLINK 产品的支持。 如果您有任何问题, 请发送电子邮件至: info@seriallink.net 或访问 www.serialink.net 介绍上文中如何在一个嵌入式系统中搭建代码编译环境的,介绍其工作原理,同时介绍从代码编写到运行在5g cpe上面的流程
最新发布
01-06
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值