用fpcupdeluxe创建的龙芯交叉编译环境带的libc.so版本比uos/loongxin(2.28)等的版本高,导致编译后的应用不能运行的问题,按网友禁卫军提供的方法(Lazarus编译Loongarch64不能运行的情况 - 禁卫军 - 博客园 (cnblogs.com)和lazaurs自建库文件系统 - 禁卫军 - 博客园 (cnblogs.com)),从loongxin系统提取相关文件后,交叉编译出来的应用可正常运行。
重新建龙芯交叉编译库步骤:
1、将cross\lib\loongarch64-linux文件夹的文件全部删除
2、从loongxin系统:
\usr\lib\loongarch64-linux-gun
提取相关文件拷贝到cross\lib\loongarch64-linux
3、修改libc.so
用文本编辑器打开libc.so文件
将文件修改为以下内容,保存后退出:
/* GNU ld script Use the shared library, but some functions are only in the static library, so try that secondarily. */ OUTPUT_FORMAT(elf64-loongarch) GROUP ( libc.so.6 libc_nonshared.a AS_NEEDED ( ld.so.1 ) )
为方便大家,已将提取并修改后的loongarch64-linux上传到:
链接:https://pan.baidu.com/s/1ADedPVwxVPFt4U3-MzwjxQ?pwd=yiqw
提取码:yiqw
需要的就下载吧。
4、重新编译应用就可以。
5、在uos/loongxin/kylin运行交叉编译的程序可能出现无响应或在终端运行时提示:没有那个文件或目录
问题的原因:
因uos/loongxin/kylin缺少/lib64/ld-linux-loongarch-lp64d.so.1造成在windows交叉编译的程序无法运行。
bash: ./project1: 没有那个文件或目录
2种解决方案:
1、临时解决方案:
在lazarus下Project-->Options->compiler options->custom options添加:
-FL/lib64/ld.so.1
缺点:这个方法需要在每个项目添加这个参数,稍微有点麻烦。
2、永久解决方案(2024-01-21新增):
打开fpcupdeluxe\fpc\bin\x86_64-win64\fpc.cfg
将
-FL/usr/lib64/ld-linux-loongarch-lp64d.so.1
替换为:
-FL/lib64/ld.so.1
缺点:如果编译的应用运行的环境不是uos/loongxin/kylin时需要恢复原来的参数。
按上述方法修改后,重新编译就可以在龙芯操作系统运行。
在windows交叉编译的程序在龙芯系统运行时的截图:
这个方法在统信和loongxin测试通过。