初识Lazarus和Free Pascal Compiler
文章目錄
- (一)概念
- (1.1)Lazarus
- (1.2)Free Pascal
- (二)安裝
- (2.1)使用fpcupdeluxe
- (2.1.1)安裝Lazarus+FPC
- (2.1.2)安裝交叉編譯器
- (2.1.3)安裝組件模塊
- (2.2)手動下載安裝
- (三)使用
- (3.1)基本使用
- (3.2)整體主界面
- (3.3)安裝幫助文件
- (3.4)編譯模式
- (3.5)字符編碼
- (3.3.1)帶LCL支持的界面程序
- (3.3.2)帶LCL支持的命令行程序
- (3.3.3)普通命令行程序
- (3.3.4)普通命令行程序(手動轉換編碼)
- (3.3.4)普通命令行程序(設置編碼頁)
- (3.6)待續
(一)概念
說到Pascal語言,除了很早的Turbo Pascal,大家通常都是用的Delphi系列。
在Delphi7那個無比輝煌的年代過后,它就被微軟的.net引入了低谷。(就是那個微軟,還無間道了諾基亞)。
它的公司·Borland·幾經被收購,現在屬于🔗Embarcadero,目前進化成了一個跨平臺全方位的開發工具。
聽起來不錯,但是Pascal語言也從20多年前占據半壁江上,
變成了現在使用率極小,和VB差不多,歸類“其它”的開發語言。
相信很多公司都只購買過Delphi7,后面的軟件升級換代是否只能遷移到C++、Java、Golang了?
當然不是,除了Delphi7的Object Pascal,現在還有Free Pascal和它的編譯器,以及IDE可供選擇。
(1.1)Lazarus
👉 官網
Lazarus 是一個兼容 Delphi 的跨平臺集成開發環境,用于快速應用程序開發。
它有多種可供使用的組件和一個圖形表單設計器,可以輕松創建復雜的圖形用戶界面。:
(1.2)Free Pascal
👉 官網
Free Pascal 是一個成熟的、通用的、開源的 Pascal 編譯器。 —— (FPC)
它可以針對許多處理器架構:Intel x86(16 位和 32 位)、AMD64/x86-64、PowerPC、PowerPC64、SPARC、SPARC64、ARM、AArch64、MIPS、摩托羅拉 68k、AVR 和 JVM。
支持的操作系統包括 Windows(16/32/64 位、CE 和原生 NT)、Linux、Mac OS X/iOS/iPhoneSimulator/Darwin、FreeBSD 和其他 BSD 風格、DOS(16 位或 32 位 DPMI)、操作系統 /2、AIX、Android、Haiku、Nintendo GBA/DS/Wii、AmigaOS、MorphOS、AROS、Atari TOS,以及各種嵌入式平臺。
此外,開發版還提供對 RISC-V (32/64)、Xtensa 和 Z80 架構以及 LLVM 編譯器基礎架構的支持。
此外,Free Pascal 團隊維護了一個將 pascal 轉換為 Javascript 的轉換器,稱為 pas2js。
(二)安裝
當然可以去官網下載安裝包。
懶人的話可以選擇fpcupdeluxe這個工具。
(2.1)使用fpcupdeluxe
👉 WIKI
FPCUPdeluxe 是 FPC 和 Lazarus 的圖形界面安裝程序。 它基于 fpcup。
它就像Python環境的Anaconda那樣把分散的步驟集成到一個圖形界面中。
可以一鍵下載安裝Lazarus+FPC的版本,并能通過快捷方式啟動不同的環境。
(2.1.1)安裝Lazarus+FPC
點擊【install/update FPC+Laz】
(2.1.2)安裝交叉編譯器
第二個標簽頁,選需要的交叉編譯類型組合,然后點擊【install cross-compiler】。
截圖中可以通過日志看到,我已經下載了2個。
PS:沒想到Win64編譯Win32,也屬于交叉……
(2.1.3)安裝組件模塊
第三個標簽頁,選需要的組件/模塊,然后點擊【install module】。
比如這里我下載了indy,不過重新打開后,日志似乎看不到(可到目錄中查看)。
(2.2)手動下載安裝
當然也可以全手動進行,但是我并沒有:)
請參看官網說明。
(三)使用
(3.1)基本使用
如果你是通過FPCUPdeluxe安裝的。
則需要用桌面快捷方式進入Lazarus。
快捷方式內容大概如下C:\fpcupdeluxe\lazarus\lazarus.exe --pcp="C:\fpcupdeluxe\config_lazarus"。
整個界面和Delphi差不多。
配置使用/編寫代碼/調試,方式也差不多。
舊的Delphi項目也有轉換選項。
(3.2)整體主界面
剛安裝好的Lazarus并不是上面圖的樣子,
而是更像Delphi7,各個部分的窗口是獨立漂浮(undocked)的。
如果希望界面變成一個整體的窗口,需要進入菜單【Package】->【Install/Uninstall Pacages】。
安裝下面左邊3個包(沒安裝之前,它們會出現在右邊,請搜索)。
選擇安裝這三個包后,點擊【Save and rebuild IDE】。
等待編譯完成并自動重啟后,IDE主界面就是一體的了。
(3.3)安裝幫助文件
官方WIKI: 🔗https://wiki.freepascal.org/Installing_Help_in_the_IDE
安裝CHM幫助的簡單總結:
之后就可以用幫助了。
比如光標指向MessageDlg,按下F1,出現幫助:
(3.4)編譯模式
新建的Lazarus項目前面有:
{$mode objfpc}{$H+}從Delphi轉換的項目前面有:
{$MODE Delphi}區別在官方WIKI中有描述:
🔗 https://www.freepascal.org/docs-html/prog/progap4.html#progse62.html
但是我還是不明白,為什么在Delphi模式下:
Format('時長: %1.2f 秒', [3.21]) 輸出的卻是 0.00……
所以我都不用Delphi模式。
(3.5)字符編碼
對于使用漢字的我們,Lazarus的字符編碼情況,比Delphi復雜太多了。
Delphi一般不需要做任何設置,會自動跟隨操作系統字符集。
只有在讀取特定編碼的文本文件時指定一下。
但Lazarus有很多種情況,有意思多了……似乎也沒有完美的辦法。
PS:首先記住Lazarus默認用的是UTF8編碼保存源代碼文件。
(3.3.1)帶LCL支持的界面程序
這是最簡單的,和Delphi一樣基本上中文都能正常顯示,不需要特殊處理。😍
當新建一個默認的Application時,項目文件uses中有Interfaces
同時在Project Inspector中能看到依賴了LCL( Lazarus Component Library):
(3.3.2)帶LCL支持的命令行程序
但是如果你需要一個命令行程序……
那么很遺憾,這樣的程序即使不創建窗體,在沒有圖形UI的Linux上也是無法運行的(Windows下測試倒是可以)。
PS:沒有圖形UI的Linux,指本身沒有圖形界面,也沒有將圖形界面映射到別的顯示設備上,或沒有圖形界面支持。
新建一個默認的Application,但不建立窗體,代碼如下:
program proTestEncoding; {$mode objfpc}{$H+} uses{$IFDEF UNIX}cthreads,{$ENDIF}{$IFDEF HASAMIGA}athreads,{$ENDIF}Interfaces, // this includes the LCL widgetsetForms; constWantLine='簡體中文'; varaLine:String; beginApplication.Initialize;Write(String('請輸入【簡體中文】:'));ReadLn(aLine);if aLine=WantLine thenbeginWriteLn(String('正確。您輸入的是:')+aLine);endelsebeginWriteLn(String('哎喲!您輸入的是:')+aLine);end; end.Windows下正常:
PS C:\fpcupdeluxe\projects> .\proTestEncoding.exe 請輸入【簡體中文】:簡體中文 正確。您輸入的是:簡體中文 PS C:\fpcupdeluxe\projects>WSL Linux(Ubuntu)下出錯:
$shion@shionwsl ~> /mnt/c/fpcupdeluxe/projects/proTestEncoding.linux.exe (proTestEncoding.linux.exe:435): Gtk-WARNING **: 11:03:16.700: cannot open display: 172.30.64.1:0 $shion@shionwsl ~>當然,Linux下可以安裝GTK支持并將UI映射到別的設備上 。
可參考:🔗《發現WSL(Windows Subsystem for Linux)支持GUI(圖形界面)的Linux應用了》
這時雖然我們沒有建立任何窗體,但是程序正常運行了。
PS:還可以彈窗呢(加入ShowMessage('XXX'))。
但是把:Write(String('請輸入【簡體中文】:'));
換成: Write('請輸入【簡體中文】:');
則Windows下產生亂碼。—— 現象是用GBK方式讀取了UTF8編碼的漢字。
而Linux沒問題,原因可能是程序輸出了UTF8編碼的漢字,但是Windows的CMD認為程序輸出的是GBK。
但為什么String('xxxx')就正常呢。。。
(3.3.3)普通命令行程序
前面一節的內容似乎有點不正常……
既然是命令行程序,那么不要LCL支持就OK了。
不要LCL當然也不能彈窗了,純cmd下ShowMessage('xxxx')干嘛。
見:🔗官方論壇10年前的討論 (不像Delphi,它少了Application.Initialize;彈不了窗口)。
代碼變成:
program proTestEncoding; {$mode objfpc}{$H+} usesclasses; constWantLine='簡體中文'; varaLine:String; beginWrite(String('請輸入【簡體中文】:'));ReadLn(aLine);if aLine=WantLine thenbeginWriteLn(String('正確。您輸入的是:')+aLine);//ShowMessage('正確。您輸入的是:'+aLine);endelsebeginWriteLn(String('哎喲!您輸入的是:')+aLine);//ShowMessage('哎喲!您輸入的是:'+aLine);end; end.Windows下亂碼:(猜一下,沒有LCL就沒法識別操作系統的編碼了?,全UTF8啦?)
順便產生了IO錯誤 😓
Linux下正常依舊。
(3.3.4)普通命令行程序(手動轉換編碼)
既然Lazarus默認UTF8,而Windows的CMD需要Ansi(GBK)編碼。
那么就手動Utf8ToAnsi轉換一下編碼吧:
每句都要轉很麻煩
PS:另外還可以研究一下LConvEncoding單元的CP936ToUTF8,UTF8ToCP936。
需要依賴LazUtils(在Project Inspector中查看)
(3.3.4)普通命令行程序(設置編碼頁)
在程序前面設置{$codepage UTF8},
program proTestEncoding; {$mode objfpc}{$H+} {$codepage UTF8} ......這樣就不需要進行任何轉換了
但是根據FPC🔗官方的說明,這個選項通常不打開。
也許這段說明沒有考慮到無LCL支持的情況吧?
麻煩的是,得處理常量字符串用,用String('XXX')轉一下,否則編碼還是不對……
見官方的說明鏈接,如下表。
看一眼就開始頭痛了:
(3.6)待續
總之字符編碼沒找到完美的解決方案……
繼續研究……
總結
以上是生活随笔為你收集整理的初识Lazarus和Free Pascal Compiler的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2005/2006/2007/2008/
- 下一篇: 如何手动卸载SQLServer 2005