linux - newlib:编译器在构建 32 位兼容性时会感到困惑
问题描述
我正在编译 newlib,所以我可以继续构建我的交叉编译器,但是 newlib 对我也包含在我的交叉编译器中的 32 位支持感到困惑。
我已经编译并安装了我的交叉编译器,但它缺少一个标准库和 libgcc,所以大多数程序不会编译,但只要使用-nostdlib
参数,不使用标准函数的程序就会编译
如果你问我:“你应该改用 glibc!”,我会回答:它需要来自 Linux 的源文件,但是 Linux 源代码在 Windows 上不能很好地运行,因为 Windows 认为某些文件是相同的由于不区分大小写的文件系统。
错误是:
x86_64-linux-gnu-gcc -m32 -DPACKAGE_NAME=\"newlib\" -DPACKAGE_TARNAME=\"newlib\" -DPACKAGE_VERSION=\"4.0.0\" -DPACKAGE_STRING=\"newlib\ 4.0.0\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -I. -I../../../../../../../newlib/newlib/libc/machine/x86_64 -fno-builtin -DMISSING_SYSCALL_NAMES -DHAVE_INIT_FINI -fno-builtin -DMISSING_SYSCALL_NAMES -DHAVE_INIT_FINI -nostdlib -m32 -c -o lib_a-setjmp.o `test -f 'setjmp.S' || echo '../../../../../../../newlib/newlib/libc/machine/x86_64/'`setjmp.S
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S: Assembler messages:
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:25: Error: bad register name `%rbx'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:26: Error: bad register name `%rbp'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:27: Error: bad register name `%r12'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:28: Error: bad register name `%r13'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:29: Error: bad register name `%r14'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:30: Error: bad register name `%r15'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:31: Error: bad register name `%rsp)'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:32: Error: bad register name `%rax'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:33: Error: bad register name `%rsp)'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:34: Error: bad register name `%rax'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:35: Error: bad register name `%rax'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:39: Error: bad register name `%rsi'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:41: Error: bad register name `%rdi)'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:44: Error: bad register name `%rdi)'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:45: Error: bad register name `%rdi)'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:46: Error: bad register name `%rdi)'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:47: Error: bad register name `%rdi)'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:48: Error: bad register name `%rdi)'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:49: Error: bad register name `%rdi)'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:50: Error: bad register name `%rdi)'
这是整个日志:
我的编译器是:MinGW-w64 x86-64(来自 MSYS2)
我要构建的交叉编译器是:Linux x86-64
解决方案
我修好了它。我只是禁用了 multilib,因为我可以简单地为 32 位构建另一个编译器。
推荐阅读
- swift - OSX 终端应用程序错误:线程 1:EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)
- python - 将小部件添加到从 .ui 文件创建的布局中
- angular - 如何设置 ng-autocomplete 包的输入标签的样式?
- c++ - 读取“扩展”文件属性 (C++)
- python - 合并两个数据框并保留公共值,同时保留基于另一列的值
- powershell - 在进程中进行多个 Exchange Online V2 模块连接调用时内存不足
- xamarin - Android Xamarin指纹获取唯一ID来设置用户名
- sql - 如何获取本身不是唯一但链接到唯一字段(在 SQL 中)的值?
- android - 如何使用 Kotlin 删除底部导航栏顶部的边框或线条?
- prolog - 在 prolog 中从文本文件中读取