秋·风

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

用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测试通过。

posted on 2024-01-08 14:46  秋·风  阅读(1005)  评论(0编辑  收藏  举报