我有两个编译选项,选项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 操作系统的完美组合,从路由的角度来看,之后如果您忘记了一些路径,则必须解决缺失的路径。祝你好运!