2011-08-26 75 views
0

我正在教授使用pascal編程高中生的編程以及某些出於我的好奇心。如何使用Freepascal進行編譯時禁用RTL

我想做一個簡單的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目錄,但奇怪的是源代碼仍然可以編譯。

任何建議或我錯過任何一步?

回答

3

FPC包含一些編譯後的默認單位路徑(您可以通過將-n傳遞給編譯器來禁用這些路徑並加載所有配置文件)。儘管如此,編譯後的路徑並不能解釋爲什麼程序仍會在刪除/usr/lib/fpc/2.4.0/units/x86_64-linux/rtl時編譯。要縮小這個範圍,請編譯-va並檢查輸出。以PPU Loading開頭的行顯示編譯器獲取單元的位置。

0

我剛剛看到這個,但是你看過/ usr/lib/fpc和/ usr/local/lib/fpc嗎?在我的版本中有一些fpc版本,編譯器可能會在編譯時找到rtl的前一個副本。

你也可以嘗試在你的系統中搜索math.ppu。該文件可能還有幾個版本分散。

最後,如果您要更改/etc/fpc.cfg,請確保源目錄中沒有其他版本。編譯器將在系統之前讀取本地fpc.cfg。

+0

只有'/ usr/lib/fpc/2.4.0'和'/ etc/fpc.cfg'。我正在安裝新鮮安裝的Ubuntu 11.04上的fpc。 –