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

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

我有两个编译选项,选项1:使用 x86_x64 ubuntu 或 debian 系统进行交叉编译以进行 armhf 包编译,选项2 Qemu 中的 ubuntu 或 debian armhf 映像。

我遇到的问题是,当使用交叉编译时,编译失败,因为源包是使用 gcc4.8 编译的,而我为交叉编译安装的版本是 gcc4.9。

因此,我选择直接从 qemu 中的 ubuntu 或 debian armhf 映像进行构建。

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

我已经看到并测试过有些人已经为 android 构建了 python、模块和可执行二进制文件,我目前安装了 python2 和 python3,我在平板电脑上有 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

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

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 包,我从中提取所有二进制文件和可执行文件,以便稍后手动将它们安装在我的平板电脑上,正确保存目录,使用 chmod 和 chown 授予适当的权限并创建符号链接,以便它们与相应的库建立连接,因为 android 使用略有不同的目录结构。

但它不起作用,一切都编译并生成了软件包,然后当我执行上面提到的安装过程时,我重新启动平板电脑并在这种情况下运行命令“zip”以查看它是否已经正常工作,结果是否定的,因为我收到一条错误消息“没有这样的文件或目录”当我使用命令“command -v zip”时,文件存在,它已正确安装并且权限正确,至少我应该收到一个错误,例如“错误:未找到somelib .so”如果它至少已被正确编译,因为某些依赖项尚未编译,但没有。

uname -m

给我 armv7l

有什么解决办法吗?

答案1

思考再三,我找到了解决方案,我将其作为自己的答案发布,因为它可以帮助某些人,尤其是如果有人在 EOL 环境中构建,如评论中所述,问题出在LD_LIBRARY_PATH,您必须将/system/lib路径导出为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 操作系统的完美组合,从路由的角度来看,之后如果您忘记了一些路径,则必须解决缺失的路径。祝你好运!

相关内容