我有两个编译选项:
amd64
使用Ubuntu或Debian系统进行交叉编译,进行armhf
包编译。- 在 QEMU 中运行
armhf
Ubuntu 或 Debian 的映像。
我遇到的问题是,使用交叉编译时,编译失败,因为源包是使用GCC 4.8编译的,而我安装的交叉编译版本是GCC 4.9。
因此,我选择直接从armhf
QEMU 中的 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
会生成一个包,我从中提取所有二进制文件和可执行文件,以便稍后在我的平板电脑上手动安装它们,正确保留目录,授予使用chmod
和chown
创建符号链接的适当权限,以便它们具有连接及其相应的库,因为 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 操作系统,那么您就必须在路由的意义上解决丢失的路径,如果您忘记了一些路径,则必须解决丢失的路径。祝你好运!