用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測試通過。

浙公網安備 33010602011771號