楼主在 fedora37 和 ubuntu22.04 上试了都不行,都是在 configure 阶段遇到奇怪的,不知道怎么解决的错误。
我在 fedora 上执行的 configure 命令行是:
/a/source/qemu-7.2.0/configure --target-list=aarch64-softmmu --enable-debug --cross-prefix=aarch64-linux-gnu- --prefix=/home/d/.local
报错是:
ERROR: "aarch64-linux-gnu-gcc" cannot build an executable (is your linker broken?)
我在 ubuntu 上执行的命令行是:
~/qemu-7.2.0/configure --target-list=aarch64-softmmu --enable-debug --cross-prefix=aarch64-linux-gnu- --prefix=/home/d/.local
报错是:
ERROR: pkg-config binary 'aarch64-linux-gnu-pkg-config' not found
1
lechain 2023-03-14 18:49:39 +08:00
错误提示很明确呀,ERROR: "aarch64-linux-gnu-gcc" cannot build an executable (is your linker broken?) 找不到 目标平台的链接器
ERROR: pkg-config binary 'aarch64-linux-gnu-pkg-config' not found 找不到目标平台的软件包配置 |
2
hwdef 2023-03-14 18:49:39 +08:00
ubuntu 上装个包再试试
``` sudo apt-get install -y pkg-config-aarch64-linux-gnu ``` |
3
wniming OP @hwdef 有这么简单我就不会发帖问了
root@ubuntu:/home/d# apt update Hit:1 http://cn.archive.ubuntu.com/ubuntu jammy InRelease Get:2 http://cn.archive.ubuntu.com/ubuntu jammy-updates InRelease [119 kB] Get:3 http://cn.archive.ubuntu.com/ubuntu jammy-backports InRelease [107 kB] Get:4 http://cn.archive.ubuntu.com/ubuntu jammy-security InRelease [110 kB] Fetched 336 kB in 4s (80.6 kB/s) Reading package lists... Done Building dependency tree... Done Reading state information... Done 10 packages can be upgraded. Run 'apt list --upgradable' to see them. root@ubuntu:/home/d# apt-get install -y pkg-config-aarch64-linux-gnu Reading package lists... Done Building dependency tree... Done Reading state information... Done E: Unable to locate package pkg-config-aarch64-linux-gnu root@ubuntu:/home/d# |
5
tags 2023-03-14 18:55:04 +08:00
交叉编译器没装好,sudo apt install crossbuild-essential-arm64
|
6
wniming OP @tagorewu 感谢回复,刚刚 apt install crossbuild-essential-arm64 安装了还是一样的问题
|
7
aapeli 2023-03-14 19:08:51 +08:00
可以试试直接安装 deb 包,
wget http://security.ubuntu.com/ubuntu/pool/universe/g/gcc-defaults/pkg-config-aarch64-linux-gnu_7.4.0-1ubuntu2.3_amd64.deb # sudo apt install pkg-config # sudo dpkg -i pkg-config-aarch64-linux-gnu_7.4.0-1ubuntu2.3_amd64.deb |
8
mepwang 2023-03-14 19:17:27 +08:00
你好像没明白在不同的 linux 发行版上,包管理器是不一样的。
在 ubuntu 22.04 上,arm v8 交叉编译器的包名是 gcc-aarch64-linux-gnu |
9
424778940 2023-03-14 19:34:43 +08:00
sudo apt -y install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu cpp-aarch64-linux-gnu binutils-aarch64-linux-gnu
请 |
10
424778940 2023-03-14 19:35:40 +08:00
建议楼主虚心学习基础知识 不要操之过急
|
13
wniming OP @424778940
d@ubuntu:~/build$ sudo apt -y install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu cpp-aarch64-linux-gnu binutils-aarch64-linux-gnu Reading package lists... Done Building dependency tree... Done Reading state information... Done cpp-aarch64-linux-gnu is already the newest version (4:11.2.0-1ubuntu1). g++-aarch64-linux-gnu is already the newest version (4:11.2.0-1ubuntu1). gcc-aarch64-linux-gnu is already the newest version (4:11.2.0-1ubuntu1). binutils-aarch64-linux-gnu is already the newest version (2.38-4ubuntu2.1). 0 upgraded, 0 newly installed, 0 to remove and 10 not upgraded. d@ubuntu:~/build$ d@ubuntu:~/build$ d@ubuntu:~/build$ ~/qemu-7.2.0/configure --target-list=aarch64-softmmu --cross-prefix=aarch64-linux-gnu- --prefix=/home/d/.local ERROR: pkg-config binary 'aarch64-linux-gnu-pkg-config' not found d@ubuntu:~/build$ 我刚才是已经试过了才回帖的 |
14
pagxir 2023-03-14 20:09:12 +08:00 via Android
安装一下 qemu-user-static 然后 update 一下 binfmt 就可以了。失败是因为 configuration 过程中需要执行编译生成的 arm64 的可执行程序。
|
15
pagxir 2023-03-14 20:10:01 +08:00 via Android
还有一个方法就是不用交叉编译,直接手机安装 Alpine 编译。
|
16
wniming OP |
17
BrettD 2023-03-14 20:27:25 +08:00
因为指定了 prefix=aarch64-linux-gnu 所以 configure 去找 aarch64-linux-gnu-pkg-config ,这个 wrapper 要自己做一个,export PKG_CONFIG_PATH=你的交叉编译环境的 pkgconfig 数据路径,然后再调用 pkg-config
|
18
424778940 2023-03-14 20:39:08 +08:00
```
export PKG_CONFIG_DIR="" export PKG_CONFIG_LIBDIR=/usr/lib/aarch64-linux-gnu/pkgconfig pkg-config --list-all ``` |
20
wniming OP @424778940 感谢回复,我的系统上没有 /usr/lib/aarch64-linux-gnu/pkgconfig 这个路径,这个路径是哪个包里的?
|
21
424778940 2023-03-14 20:52:29 +08:00
@wniming 你得是装了 arm64 的 libxxx 包这个路径才会有东西吧
装 arm 的 lib 还要添加新的 deb 源才行 |
22
424778940 2023-03-14 20:55:28 +08:00 1
这是我自己的对应 22.10 的脚本 添加 arm 源, 你如果用别的版本 记得自己改掉发行版代号
sudo sed -i 's/^deb/deb [arch=amd64]/g' /etc/apt/sources.list sudo dpkg --add-architecture arm64 sudo dpkg --add-architecture armhf sudo tee -a /etc/apt/sources.list.d/source-arm.list > /dev/null <<EOT deb [arch=armhf,arm64] http://ports.ubuntu.com/ kinetic main restricted deb [arch=armhf,arm64] http://ports.ubuntu.com/ kinetic-updates main restricted deb [arch=armhf,arm64] http://ports.ubuntu.com/ kinetic universe deb [arch=armhf,arm64] http://ports.ubuntu.com/ kinetic-updates universe deb [arch=armhf,arm64] http://ports.ubuntu.com/ kinetic multiverse deb [arch=armhf,arm64] http://ports.ubuntu.com/ kinetic-updates multiverse deb [arch=armhf,arm64] http://ports.ubuntu.com/ kinetic-backports main restricted universe multiverse EOT sudo apt update 需要安装的包列表参考 https://wiki.qemu.org/Hosts/Linux#Cross_builds 安装命令格式为 sudo apt install libssl-dev:arm64 注意替换你自己需要的包 pkg-config 的 wrapper 在 20.04 之后好像就没有包了 自己找一个或者写一个吧 也没几句话的事情 |
23
wniming OP |
24
wniming OP @424778940 我发现 fedora 的交叉编译只能编译内核,bootloader 等裸程序,连 hello world 都不支持:
https://discussion.fedoraproject.org/t/cross-compiling-to-arm/71516/6 |