在 x86_64 linux 机器上为(Linux 5.16.10,aarch64)主机交叉编译 glibc 时出错:未知架构'armv8.5-a'

发布于 2025-01-11 16:42:44 字数 2529 浏览 5 评论 0原文

我需要使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文