64位RISC-V架构Fedora运行riscyforth缺失依赖库问题求助
问题根本原因
你遇到的./riscyforth: No such file or directory报错并非程序文件本身不存在,而是ELF程序指定的动态链接器(程序解释器)路径和Fedora RISC-V系统的实际路径不匹配,和32位库完全无关:
- 你在Debian系统上编译的程序默认请求的动态链接器路径为
/lib/ld.so.1,这是Debian系列RISC-V 64位系统的glibc动态链接器默认路径 - Fedora RISC-V 64位系统的glibc动态链接器默认路径为
/lib/ld-linux-riscv64-lp64d.so.1,系统找不到你程序请求的链接器文件,才会抛出找不到文件的报错
解决方案
你可以任选以下一种方案解决问题:
方案1:直接做路径兼容(无需修改程序/重新编译)
执行以下命令给动态链接器创建软链接即可:
ln -s /lib/ld-linux-riscv64-lp64d.so.1 /lib/ld.so.1
执行完成后就可以正常运行./riscyforth。
方案2:修改Makefile适配Fedora(编译一次就可以原生运行)
在Makefile的编译参数中添加动态链接器指定参数即可,如果你用gcc作为汇编前端,添加参数:-Wl,--dynamic-linker=/lib/ld-linux-riscv64-lp64d.so.1
用该参数编译出的二进制可以直接在Fedora RISC-V 64位系统上运行。
方案3:静态编译(跨发行版通用)
如果你的程序没有强制动态链接的依赖,可以直接在Makefile的编译参数中添加-static参数,编译出的静态二进制不依赖系统动态链接器,在所有RISC-V 64位Linux发行版上都可以直接运行。
内容的提问来源于stack exchange,提问作者adrianmcmenamin
相关产品推荐
相关产品推荐

