And*_*mas 5 linux build cross-compiling dpkg deb
我正在尝试使用以下方法创建amd64包:
sudo dpkg-buildpackage -us -uc -aamd64
Run Code Online (Sandbox Code Playgroud)
在i386机器上.
我得到的错误是:
Can't exec "x86_64-linux-gnu-strip": no such file or directory at /usr/share/perl5/Debian/Debhelper/Dh_Lib.pm line 215
Run Code Online (Sandbox Code Playgroud)
有什么建议?
构建交叉编译器/binutils 通常非常困难,并且它不允许您测试您的程序。
虚拟机速度非常慢,并且产生强烈的分离,这使得主机和虚拟机之间很难共享文件。
最快的解决方案和 KISS 方式是Qemu-User-static:系统调用在用户模式下转换为 32 位。64 位内核对 32 位应用程序执行相同的操作(但在内核模式下)。
从 64 位 Debian livecd 下载或提取 rootfs。
将其复制到您真实根目录的子文件夹中。
将 qemu-user-x86_64 复制到相对于新提取的 rootfs 的 $PATH 文件夹。
将 /etc/resolv.conf 复制到 /your_path_to_target/etc/resolv.conf 通过执行 /bin/bash 对其进行 Chroot。
启动 apt-get 安装必要的工具。
使用 rootfs 就像使用真正的 64 位机器一样。
事情变得非常简单:许多库由于诸如硬编码路径之类的原因而无法编译(您将面临很多很多问题,例如交叉编译时遇到的问题)。这一切的发生就好像您本地构建软件包并且可执行文件是 IA-32 一样。
如果您使用 x86_64 CPU 和 64 位内核,则可以跳过整个 qemu 部分。只需提取 64 位 rootfs 并对其进行 chroot 即可:这将是可能存在的最快解决方案,并且 dpkg-buildpackage 将始终有效 (无需使用 pbuilder 等工具)。
如果您想在 chroot 内使用网络,请不要忘记复制 /etc/resolv.conf。
。
如果您在 64 位系统上使用 32 位内核,则可以使用带有修改后的 BIOS 的 qemu-kvm,它将比 qemu-user 更快,因为不需要 JIT 重新编译。
| 归档时间: |
|
| 查看次数: |
1034 次 |
| 最近记录: |