有个github repo要编译需要安装他们提供的riscv gcc编译工具。repo在ubuntu 20.04上可以正常编译。
然后我想把编译环境迁移到archlinux上来,发现他们提供的riscv gcc在archlinux上无法运行了。查看version信息是可以显示的,但是去编译.c文件就会出现下面错误:
./riscv32-elf-gcc ~/a.c
Segmentation fault
他们的文档里推荐使用ubuntu 20.04,我原本以为现成的toolchain从ubuntu复制过来运行应该差别不大,应该可以通用。结果看来并不可行。
难道是因为glibc版本不一致吗?archlinux的glibc版本太新了?
最近编辑记录 renxiuhu (2023-09-21 15:03:34)
离线
别猜。gdb 看看为什么段错误。
离线
别猜。gdb 看看为什么段错误。
riscv32-elf-gcc是现成提供的编译工具链,gdb attach之后没有symbols:
$ gdb riscv32-elf-gcc ~/a.c
...
Reading symbols from riscv32-elf-gcc...
(No debugging symbols found in riscv32-elf-gcc)
离线
没符号也能看出来段错误的直接原因呀。看看反汇编,再看看寄存器的值。
离线
没符号也能看出来段错误的直接原因呀。看看反汇编,再看看寄存器的值。
好的,我再试试,多谢
离线
update了一下系统可以编译了,现在编译一个空.c文件已经没有段错误了:
$ ./riscv32-elf-gcc ~/a.c
/home/renxiuhu/opt/risc-v/nds32le-elf-mculib-v5f/bin/../lib/gcc/riscv32-elf/10.4.0/../../../../riscv32-elf/bin/ld: /home/renxiuhu/opt/risc-v/nds32le-elf-mculib-v5f/bin/../lib/gcc/riscv32-elf/10.4.0/../../../../riscv32-elf/lib/crt0.o: in function `.L0 ':
(.text+0x52): undefined reference to `main'
collect2: error: ld returned 1 exit status
虽然没搞清楚原有,但是问题解决!
离线
找到原因,是vsyscall没开启导致的,打开就好了。有类似问题的可以参考
可能我更新了系统,把grub配置又改过来了。
离线
原来又是这 vsyscall 的问题。
离线
不对啊, Arch 不是开了 vsyscall 的么。
离线
不对啊, Arch 不是开了 vsyscall 的么。
不清楚了,可能我之前操作给关了:D
最近编辑记录 renxiuhu (2023-09-22 17:34:58)
离线