我正在为高中生教授使用pascal的编程,而且出于好奇心。
我想制作一个简单的pascal源代码批处理编译器来编译我的学生的源代码文件。但是我想限制源代码使用RTL单元,比方说math
。
program test;
uses math;
begin
writeln(logn(2,2));
end.
logn
是来自math
单位的函数,所以当我删除uses math
行时,fpc编译器会在编译上面的代码后显示错误消息。
当我查看/etc/fpc.cfg
文件时,RTL单元包含在单元路径中。
# searchpath for units and other system dependent things
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/*
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/rtl
#-Fu~/fpc/packages/base/*/units/;~/fpc/fcl/units/;~/fpc/rtl/units/
但是在我评论了所有这些线之后,RTL单元仍然是链接的。作为我的最后一招,我尝试删除了rtl /usr/lib/fpc/2.4.0/units/x86_64-linux/rtl
目录,但奇怪的是源代码仍然可以编译。
有任何建议或我是否错过任何一步?
答案 0 :(得分:3)
FPC包含一些已编译的默认单元pathes(您可以通过将-n
传递给编译器来禁用它们并加载所有配置文件)。尽管如此,编译后的路径并没有解释为什么在删除/usr/lib/fpc/2.4.0/units/x86_64-linux/rtl
时程序仍然可以编译。要缩小此范围,请使用-va
进行编译并检查输出。以PPU Loading
开头的行显示编译器获取单位的位置。
答案 1 :(得分:0)
我刚看到这个,但你看过/ usr / lib / fpc和/ usr / local / lib / fpc吗?在我的版本中有几个版本的fpc,编译器可能在编译时找到了rtl的前一个副本。
您也可以尝试在系统中搜索math.ppu。该文件可能还有几个版本。
最后,如果您要更改/etc/fpc.cfg,请确保源目录中没有其他版本的。编译器将在系统之前读取本地fpc.cfg。