在 x86_64 linux 机器上为(Linux 5.16.10,aarch64)主机交叉编译 glibc 时出错:未知架构'armv8.5-a'
我需要使用 glibc v2.35,具有内存标记支持(在 aarch64、在 QEMU 中运行的 linux 5.16.10 VM 上使用)。我正在尝试在我的 x86_64 机器上从源代码交叉编译 glibc。 我首先创建了一个 glibc-2.35-build 文件夹,然后运行 configure :
../glibc-2.35/configure aarch64-linux-gnu --prefix=/home/aditi712/glibc-2.35-usr-local --with-headers=/usr/aarch64-linux-gnu/include --enable-memory-tagging --host=aarch64-linux-gnu --build=x86-64-linux-gnu CC="aarch64-linux-gnu-gcc" CFLAGS="-g -O2"
运行成功。
然后,我在构建文件夹中创建了一个 configparams 文件,其中包含:
CC="aarch64-linux-gnu-gcc"
BUILD_CC="gcc"
然后我在构建文件夹中运行“make”。我收到以下错误:
In file included from ../sysdeps/unix/sysv/linux/aarch64/libc-start.c:26:
../sysdeps/unix/sysv/linux/aarch64/cpu-features.c: In function ‘init_cpu_features’:
../sysdeps/unix/sysv/linux/aarch64/cpu-features.c:112:14: error:
‘PR_SET_TAGGED_ADDR_CTRL’ undeclared (first use in this function); did you mean
‘NT_ARM_TAGGED_ADDR_CTRL’?
__prctl (PR_SET_TAGGED_ADDR_CTRL,
^~~~~~~~~~~~~~~~~~~~~~~
NT_ARM_TAGGED_ADDR_CTRL
../sysdeps/unix/sysv/linux/aarch64/cpu-features.c:112:14: note: each undeclared
identifier is reported only once for each function it appears in
../sysdeps/unix/sysv/linux/aarch64/cpu-features.c:113:8: error: ‘PR_TAGGED_ADDR_ENABLE’
undeclared (first use in this function); did you mean ‘PR_GET_DUMPABLE’?
(PR_TAGGED_ADDR_ENABLE | PR_MTE_TCF_SYNC | MTE_ALLOWED_TAGS),
^~~~~~~~~~~~~~~~~~~~~
PR_GET_DUMPABLE
make[2]: *** [/home/aditi712/glibc-2.35-build/sysd-rules:9: /home/aditi712/glibc-2.35-
build/csu/libc-start.o] Error 1
make[1]: *** [Makefile:483: csu/subdir_lib] Error 2
make: *** [Makefile:9: all] Error 2
我的 Linux 内核版本是 5.10(glibc 声称需要 5.10)。我也已将 binutils 更新到 v2.34 [我下载了源并手动安装]
uname -a 输出:
Linux instance-1 5.10.0-0.bpo.9-cloud-amd64 #1 SMP Debian 5.10.70-1~bpo10+1 (2021-10-10) x86_64 GNU/Linux
ld -v 输出:
GNU ld (GNU Binutils) 2.34
如何解决上述错误?
更新:我能够通过从 这里,并将它们复制到 /usr/aarch64-linux-gnu/include 文件夹。现在,我收到错误:
../sysdeps/aarch64/__mtag_tag_zero_region.S: Assembler messages:
../sysdeps/aarch64/__mtag_tag_zero_region.S:32: Error: unknown architecture `armv8.5-a'
../sysdeps/aarch64/__mtag_tag_zero_region.S:33: Error: unknown architectural extension `memtag'
我该如何解决这个问题?
I need to use glibc v2.35, with memory tagging support (to be used on aarch64, linux 5.16.10 VM running in QEMU). I am trying to cross-compile glibc from source on my machine which is x86_64.
I first made a glibc-2.35-build folder, then run configure :
../glibc-2.35/configure aarch64-linux-gnu --prefix=/home/aditi712/glibc-2.35-usr-local --with-headers=/usr/aarch64-linux-gnu/include --enable-memory-tagging --host=aarch64-linux-gnu --build=x86-64-linux-gnu CC="aarch64-linux-gnu-gcc" CFLAGS="-g -O2"
which runs successfully.
Then, I made a configparams file in the build folder, which contains:
CC="aarch64-linux-gnu-gcc"
BUILD_CC="gcc"
Then I run 'make' in the build folder. I get the following error:
In file included from ../sysdeps/unix/sysv/linux/aarch64/libc-start.c:26:
../sysdeps/unix/sysv/linux/aarch64/cpu-features.c: In function ‘init_cpu_features’:
../sysdeps/unix/sysv/linux/aarch64/cpu-features.c:112:14: error:
‘PR_SET_TAGGED_ADDR_CTRL’ undeclared (first use in this function); did you mean
‘NT_ARM_TAGGED_ADDR_CTRL’?
__prctl (PR_SET_TAGGED_ADDR_CTRL,
^~~~~~~~~~~~~~~~~~~~~~~
NT_ARM_TAGGED_ADDR_CTRL
../sysdeps/unix/sysv/linux/aarch64/cpu-features.c:112:14: note: each undeclared
identifier is reported only once for each function it appears in
../sysdeps/unix/sysv/linux/aarch64/cpu-features.c:113:8: error: ‘PR_TAGGED_ADDR_ENABLE’
undeclared (first use in this function); did you mean ‘PR_GET_DUMPABLE’?
(PR_TAGGED_ADDR_ENABLE | PR_MTE_TCF_SYNC | MTE_ALLOWED_TAGS),
^~~~~~~~~~~~~~~~~~~~~
PR_GET_DUMPABLE
make[2]: *** [/home/aditi712/glibc-2.35-build/sysd-rules:9: /home/aditi712/glibc-2.35-
build/csu/libc-start.o] Error 1
make[1]: *** [Makefile:483: csu/subdir_lib] Error 2
make: *** [Makefile:9: all] Error 2
My linux kernel version is 5.10 (glibc claims to require 5.10). I have also updated binutils to v2.34 [I downloaded the source and installed manually]
uname -a output:
Linux instance-1 5.10.0-0.bpo.9-cloud-amd64 #1 SMP Debian 5.10.70-1~bpo10+1 (2021-10-10) x86_64 GNU/Linux
ld -v output:
GNU ld (GNU Binutils) 2.34
How can I solve the above error?
Update: I was able to get past the above problem by downloading latest aarch64-linux-gnu headers from here, and copying them to /usr/aarch64-linux-gnu/include folder. Now, I am getting the error:
../sysdeps/aarch64/__mtag_tag_zero_region.S: Assembler messages:
../sysdeps/aarch64/__mtag_tag_zero_region.S:32: Error: unknown architecture `armv8.5-a'
../sysdeps/aarch64/__mtag_tag_zero_region.S:33: Error: unknown architectural extension `memtag'
How can I solve this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论