交叉编译 ARMHF 还是从 Debian 或 Ubuntu 软件包编译 Android?

交叉编译 ARMHF 还是从 Debian 或 Ubuntu 软件包编译 Android?

我有两个编译选项:

  • amd64使用Ubuntu或Debian系统进行交叉编译,进行armhf包编译。
  • 在 QEMU 中运行armhfUbuntu 或 Debian 的映像。

我遇到的问题是,使用交叉编译时,编译失败,因为源包是使用GCC 4.8编译的,而我安装的交叉编译版本是GCC 4.9。

因此,我选择直接从armhfQEMU 中的 Ubuntu 或 Debian 映像进行构建。

现在,最后一个问题以及我在这里问这个问题的原因如下:

我已经看到并测试了一些人已经为 Android 构建了 Python、模块和可执行二进制文件,我目前安装了 Python 2 和 Python 3,我在平板电脑上拥有 root 访问权限,我可以运行如下命令

python -c 'print("hello world!")'

我也可以运行 Python 脚本,就像

python myscript.py

他们使用以下标志来编译 python:

./configure --build=arm --prefix="$PWD"/out LDFLAGS="-static -static-libgcc -Wl,--unresolved-symbols=ignore-all -Wl,--export-dynamic" CPPFLAGS=-static CXXFLAGS=-static CFLAGS="-Os -static" LDFLAGS=-static LD=ld.gold

不幸的是我没有成功,我尝试zip使用以下命令编译 Debian 软件包,但没有成功。

apt-get build-dep zip
apt-get source zip
cd zip-3.0
export CFLAGS=-static
export LDFLAGS=-static
export CPPFLAGS=-static
dpkg-buildpackage -rfakeroot -uc -b

编译包后,.deb会生成一个包,我从中提取所有二进制文件和可执行文件,以便稍后在我的平板电脑上手动安装它们,正确保留目录,授予使用chmodchown创建符号链接的适当权限,以便它们具有连接及其相应的库,因为 Android 使用略有不同的目录结构。

但这不起作用。一切都已编译并生成了包,然后当我执行上述安装过程时,我重新启动平板电脑并在本例中运行命令zip以查看它是否已经在工作,结果是否定的,因为我收到一条错误消息“没有这样的文件或目录”

运行command -v zip表明该文件存在,安装正确,权限正确。如果至少已正确编译,我至少应该得到一个错误,例如“错误:somelib .so not found”,因为某些依赖项尚未编译,但事实并非如此。

uname -m

输出我armv7l

有什么解决办法吗?

答案1

思考和思考我已经找到了解决方案,我将其发布为我自己的答案,因为它可以帮助某人,如果有人在 EOL 环境中构建,则更多,如评论中所述,问题在于LD_LIBRARY_PATH,您必须导出/system/lib路径为 a LD_LIBRARY_PATH,以使 ld-linux-armhf.so.* 可供可执行文件访问,因为它是解释器。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/system/lib

不仅需要制作符号链接,还必须导出所有环境变量,以保留正确的 linux ubuntu 结构。

另外,您可以将库/system/lib挂载到根路径/lib中,更加简单和完整,这里的命令:

su root
mkdir -p /lib
chmod 0755 /lib
mount --bind /system/lib /lib

所有这些都必须在目标设备(在本例中为平板电脑)中完成。

这将创建 android 操作系统和 ubuntu 操作系统的完美组合,或者如果您在 debian 环境中构建 debian 操作系统,那么您就必须在路由的意义上解决丢失的路径,如果您忘记了一些路径,则必须解决丢失的路径。祝你好运!

相关内容