编译fpc遇到的怪事
前2天,网友在windows 11发现用我的工具编译fpc时出错:
Error: Identifier not found "FpcBaseRecordType" systemh.inc(584,49) Fatal: Cannot find system type "FPCENUMVALUEOBTAINABLE". Check if you use the correct run time library.
为排除,使用命令行进行编译也同样出错。
G:\QFLazarus\fpcbootstrap\x86_64-win64\make.exe FPC=G:\QFLazarus\fpcbootstrap\x86_64-win64\ppcx64.exe FPCDIR=G:\QFLazarus\fpcsrc PREFIX=G:\QFLazarus\fpc INSTALL_PREFIX=G:\QFLazarus\fpc INSTALL_SOURCEDIR=G:\QFLazarus\fpcsrc INSTALL_BASEDIR=G:\QFLazarus\fpc INSTALL_UNITDIR=G:\QFLazarus\fpc/units/x86_64-win64 INSTALL_BINDIR=G:\QFLazarus\fpc/bin/x86_64-win64 INSTALL_LIBDIR=G:\QFLazarus\fpc/lib INSTALL_SHAREDDIR=G:\QFLazarus\fpc/share install

查找FpcBaseRecordType所在单元发现和java有关:


编译出错时,检查fpcsrc/compiler生成的ppc.exe有点奇怪-->"for jvm":

按正常的编译,ppc理应是当前CPU(x86_64)才对。
怀疑与系统的环境变量有关,经查找系统变量,真有JVM这个变量,为验证,将这个JVM环境变量删除并重启电脑,再次用命令行编译,这次编译成功了。
需然删除jvm后能编译,但这样就破坏了原有的环境变量。
继续寻找理想的解决方案:
在fpcsrc/compiler/Makefile里找到:

删除ifdef JVM这3行,然后编译也成功。
当然,不能为了编译去修改Makefile,但从这里发现PPC_TARGET,能不能在命令行加上PPC_TARGET=x86_64呢?
立即行动,使用的命令行和前面的一样,只增加PPC_TARGET=x86_64这个参数:
G:\QFLazarus\fpcbootstrap\x86_64-win64\make.exe FPC=G:\QFLazarus\fpcbootstrap\x86_64-win64\ppcx64.exe FPCDIR=G:\QFLazarus\fpcsrc PREFIX=G:\QFLazarus\fpc INSTALL_PREFIX=G:\QFLazarus\fpc INSTALL_SOURCEDIR=G:\QFLazarus\fpcsrc INSTALL_BASEDIR=G:\QFLazarus\fpc INSTALL_UNITDIR=G:\QFLazarus\fpc/units/x86_64-win64 INSTALL_BINDIR=G:\QFLazarus\fpc/bin/x86_64-win64 INSTALL_LIBDIR=G:\QFLazarus\fpc/lib INSTALL_SHAREDDIR=G:\QFLazarus\fpc/share PPC_TARGET=x86_64 install
这次编译成功了:

特别说明:这次是和海南的网友一起解决的。
