惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Security Archives - TechRepublic
Security Archives - TechRepublic
T
The Exploit Database - CXSecurity.com
P
Proofpoint News Feed
Scott Helme
Scott Helme
NISL@THU
NISL@THU
Cisco Talos Blog
Cisco Talos Blog
C
Cybersecurity and Infrastructure Security Agency CISA
AWS News Blog
AWS News Blog
V
Vulnerabilities – Threatpost
J
Java Code Geeks
U
Unit 42
The GitHub Blog
The GitHub Blog
H
Help Net Security
T
Tenable Blog
aimingoo的专栏
aimingoo的专栏
Jina AI
Jina AI
Spread Privacy
Spread Privacy
Apple Machine Learning Research
Apple Machine Learning Research
人人都是产品经理
人人都是产品经理
L
Lohrmann on Cybersecurity
T
Threatpost
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Engineering at Meta
Engineering at Meta
A
About on SuperTechFans
I
InfoQ
Microsoft Azure Blog
Microsoft Azure Blog
B
Blog
L
LINUX DO - 最新话题
K
Kaspersky official blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Threat Research - Cisco Blogs
C
Check Point Blog
T
The Blog of Author Tim Ferriss
有赞技术团队
有赞技术团队
宝玉的分享
宝玉的分享
Help Net Security
Help Net Security
Google DeepMind News
Google DeepMind News
A
Arctic Wolf
Y
Y Combinator Blog
N
News | PayPal Newsroom
M
MIT News - Artificial intelligence
Latest news
Latest news
H
Hacker News: Front Page
Blog — PlanetScale
Blog — PlanetScale
腾讯CDC
I
Intezer
爱范儿
爱范儿
F
Fortinet All Blogs
P
Palo Alto Networks Blog
C
CERT Recently Published Vulnerability Notes

博客园 - 秋·风

fpc aarch64-win64版编译应用时遇到一个奇怪的bug 在windows 11 on arm64系统编译lazarus出错的处理方法 修复TDBMemo只读不能使用Ctrl+C复制文字的Bug freepascal打补丁后已支持windows 11 on arm64(lazarus aarch64 windows版也可以运行了) 查看libc.so.6的版本号 Lazarus移动版启动程序 lazarus鸿蒙开发13:使用鸿蒙原生API画图--lazarus侧关键代码 lazarus鸿蒙开发12:使用鸿蒙原生API画图--鸿蒙侧关键代码 lazarus鸿蒙开发11:使用鸿蒙原生接口画图 lazarus鸿蒙开发10:lazarus一键编译、打包助手 lazarus鸿蒙开发9:使用命令行编译DevEco Studio应用 lazarus鸿蒙开发8:在DevEco Studio的日志窗口显示日志信息 lazarus鸿蒙开发7:在 Windows 上为 OpenHarmony (LoongArch64) 编译 Qt 5.15.12 SDK 指南 lazarus鸿蒙开发6:鸿蒙project配置 lazarus鸿蒙开发5:编译ohos_hap_project lazarus鸿蒙开发4:编译OHOS_QT_Lazarus lazarus鸿蒙开发3:编译libLazarusOHOS_Wrapper.so lazarus鸿蒙开发2:编译鸿蒙版本Qt5pas lazarus鸿蒙开发1:编译QT 5.12.12 鸿蒙版 fpc/lazarus for x86_64/aarch64鸿蒙版(绿色版 2026.06.03更新) fastreport报表编辑器在aarch64等非x86_64 CPU第一次打开慢的解决方案 linux/windows双系统可用的打包程序 使用FPC自带的纯 Pascal 实现的 Zlib 替代品——paszlib QFLazarus使用说明 忽略lazarus console in/output窗显示的转义序列 编译fpc遇到的怪事(2026-05-20更新) 取消树莓派的系统双击桌面图标时出现弹窗的选择提示 银河麒麟v11安装lazarus的方法 【小技巧】lazarus的应用设置某个form不在任务栏显示(linux) 用lazarus封装了linux的rsync SimpleXML-for-lazarus fastreport在windows11(lazarus)报表设计时出现的问题 用lazarus编写的deb打包工具 龙芯deepin 25系统使用旧世界软件的方法 SimpleJSON for lazarus 中文转全拼音和首字母 lazarus扩展IDE宏的方法 调整lazarus gtk2编辑控件背景颜色 fpc/lazarus可用的宏 Lazarus IDE宏列表 【原创控件】PopupMenu和MainMenu自绘单元 【原创控件】PopupMenu自绘 【原创控件】lazarus自定义mainmenu菜单栏(2026-02-26 增加菜单项图标尺寸参数) cudaText存在段落长度超过一定字数时会出现字符重叠的问题 lazarus编写的程序在Ubuntu任务栏/快捷栏不显示设定的图标 lazarus实现拖放文件 在uos使用lazarus调试时遇到的问题 【原创控件】lazarus IDE界面备份和恢复插件(2026-02-07增加恢复默认布局及官方已集成到lazarus) lazarus for arm32编译so链接出错
fpc 3.2.2交叉编译i386-linux链接出错
秋·风 · 2026-06-16 · via 博客园 - 秋·风

fpc 3.2.2交叉编译i386-linux链接出错,原以为是cross的lib问题,查询发现是:
FPC 3.2.2 的源码文件 fpcsrc/rtl/linux/i386/si_c21.inc ,它引用了 __libc_csu_init 和 __libc_csu_fini 这两个函数。然而,在较新的 glibc 版本(如 2.34 及更高)中,这些符号已经被移除或不再公开导出。
因此,当 FPC 3.2.2 在链接时试图引用这些不存在的符号时,链接器就会报错。

project1.lpr(28,1) Warning: "crtn.o" not found, this will probably cause a linking failure
C:\QFLazarus_x86_64_win64\cross\bin-x86_64-win64\i386-linux\i386-linux-gnu-ld.exe: C:\Temp\project1: hidden symbol `__init_array_end' isn't defined
C:\QFLazarus_x86_64_win64\cross\bin-x86_64-win64\i386-linux\i386-linux-gnu-ld.exe: final link failed: bad value
project1.lpr(28,1) Error: Error while linking

QQ_1781612216835

解决方案:
1、升级 FPC 版本:这是最直接的解决方法。FPC 的开发者在 3.2.3 及更新的版本(包括 3.3.1)中已经修复了此问题
2、用新版si_c21.inc替换。
修复si_s21.inc后,重新编译i386-linux的交叉编译环境,然后编译应用就可以。
修复后编译已正常:

QQ_1781613050073

这是patch:

diff -urN 1\si_c21.inc 2\si_c21.inc
--- 1\si_c21.inc    Sat May 15 23:38:31 2021
+++ 2\si_c21.inc    Tue Jun 16 19:07:37 2026
@@ -35,12 +35,13 @@
 
 {$asmmode att}
 
-procedure __libc_csu_init; cdecl; external;
-procedure __libc_csu_fini; cdecl; external;
+procedure ini_dummy;
+  begin
+  end;
+
 procedure libc_start_main; external name '__libc_start_main';
 procedure libc_exit(code: longint); cdecl; external name 'exit';
 
-
 {******************************************************************************
                        glibc 2.1 lib + profiling start/halt
  ******************************************************************************}
@@ -81,20 +82,20 @@
   {$endif FPC_PIC}
 
         { int __libc_start_main(
-        int *(main) (int, char * *, char * *), 
-        int argc, 
-        char * * ubp_av, 
-        void (*init) (void), 
-        void (*fini) (void), 
-        void (*rtld_fini) (void), 
-        void (* stack_end)); } 
+        int *(main) (int, char **, char **),
+        int argc,
+        AnsiChar * * ubp_av,
+        void (*init) (void),
+        void (*fini) (void),
+        void (*rtld_fini) (void),
+        void (* stack_end)); }
 
         pushl %ebp               { padding }
         pushl %esp               { stack_end }
         pushl %edx               { function to be registered with
                                     atexit(), passed by loader }
-        pushl $__libc_csu_fini
-        pushl $__libc_csu_init
+        pushl $ini_dummy
+        pushl $ini_dummy
         pushl %esi                      { Push second argument: argv.  }
         pushl %ecx                      { Push first argument: argc.  }