คอมไพล์และติดตั้ง Lazarus ด้วย Qt widgets บนลีนุกซ์ KDE

KDE

  • ปกติผมเป็นแฟนของ Gnome มากกว่า KDE ตั้งแต่ KDE ออกรุ่น 4 เป็นต้นมามีการเปลี่ยนแปลงไปมาก แรกๆออกรุ่น 4 มารู้สึกจะได้ก้อนอิฐมากกว่าดอกไม้ เสียงบ่นกันขรมทีเดียวแต่รุ่นหลัง 4.5 ดีขึ้นผิดหูผิดตาคือไม่ค่อยตุกติกใช้ยากเหมือนก่อนหน้านี้ ก็ลองต้องมาดูกันใหม่ ประเภทสวย เนียน ดีอะไรประมาณนั้น ตอนนี้ก็เลยใช้ KDE มากขึ้นๆๆๆ แต่ไม่ถึงกับทิ้ง Gnome หรอกนักยังรักเหมือนเดิม 555 ถึงแม้เจ้า Unity ของ Ubuntu จะทำผมแทบเสียศูนย์ก็ตาม (ไม่ใช่ความผิดของ Gnome แต่เป็นของ Conocial)
Kubuntu

Qt (framework)

  • Qt (framework) เป็นเครื่องมือพัฒนาโปรแกรมแบบ cross-platform ใช้ได้หลากหลายเช่น Windows, MacOX, Linux กับหลากหลายอุปกรณ์ รวมทั้งอุปกรณ์ประเภทที่ใช้มือถือด้วย ส่วน application ที่ใช้ Qt ได้แก่ VLC, Maya, QGIS, Skype รวมถึง KDE ในลินุกซ์ด้วย เจ้าของคือ Nokia ซึ่งจะโละ Symbian ทิ้งแทนที่ด้วย Qt ผมเองเห็น demo ของ Qt มานานหลายปีแล้วรู้สึกทึ่ง แต่ปัจจุบันการเข้ามาของ Android หรือ IPad ก็เลยทำให้ Qt ดูธรรมดาไป  หลังๆมีคน port ไปใช้บน Android ด้วย
  • สำหรับผู้พัฒนาโปรแกรมด้วย Lazarus ใช้Qt Widgets เพื่อให้โปรแกรมสามารถนำไปใช้ดับ platform ที่ใช้ Qt โดยไม่ต้องติดตั้งไลบรารีของ Qt เพิ่มเติมและดูเป็นธรรมชาติไปกับ platform นั้นๆ ในฐานะของผู้พัฒนาไม่จำเป็นต้องเรียนรู้ API ของ Qt เพราะ Lazarus จัดการให้หมดผ่าน Qt Widgets LCL
แสดง Lazarus บน Qt

ติดตั้ง libQt4Pas ก่อนคอมไพล์ Lazarus

  • ก่อนจะคอมไพล์ต้องติดตั้งไลบรารี libQt4Pas.so สำหรับ binding  ซึ่งขณะนี้เป็นรุ่น 5.2.1 บน PCLinuxOS และ Kubuntu ใช้คำสั่ง

$sudo apt-get install libQt4Pas5 libQt4Pas-dev

เมื่อ Lazarus เกิด Error กับ Qt บน KDE

  • ผมลองใน PCLinuxOS กับ Kubuntu ซึ่งสองดิสโทรนี้ใช้ KDE ต้องยอมรับว่าบน PCLinuxOS เหงื่อตกเพราะนานมาแล้วไม่ได้ลองบน KDE ปัจจุบันที่เขียนอยู่นี้ KDE v. 4.5.3 ถ้าคอมไพล์และบิวด์ปกติโดยยังไม่ได้ patch จะผ่านแต่ตอนรันจะไม่ผ่าน แต่ใน Kubuntu ตอนนี้เป็นรุ่นที่ patch แล้วจึงไม่มีปัญหา
  • ใน PCLinuxOS ยังต้อง patch ตอนเรียกใช้ด้วยคำสั่ง startlazarus ซึ่งตอนนี้เป็นช่วง binding กับไลบรารี libQt4Pas.so จะเห็นหน้าตาของ Lazarus แวบออกมาแต่สักพักจะปิดตัวเองแล้วเห็น error ประมาณนี้

TLazarusManager.Run starting /usr/local/share/lazarus/lazarus …
TMainIDE.ParseCmdLineOptions:
PrimaryConfigPath=”/home/priabroy/.lazarus”
SecondaryConfigPath=”/etc/lazarus”
TMainIDE.DoNewProject A
TApplication.HandleException Access violation
Stack trace:
$B56AB28C
QWidget::repaint: Recursive repaint detected
lazarus.pp – unhandled exception
QPaintDevice: Cannot destroy paint device that is being painted
QPaintDevice: Cannot destroy paint device that is being painted
[TMainIDE.Destroy] A
[TMainIDE.Destroy] B -> inherited Destroy… TMainIDE
[TMainIDE.Destroy] END

สาเหตุ

  • เท่าที่ค้นหาดูในอินเทอร์เน็ตระบุว่าตั้งแต่ Qt 4.7 เป็นต้นมาจะเปิด SSE2 (ชุดคำสั่งประมวลผลด้านมัลติมีเดีย) โดยปริยาย ผมสงสัยว่า SSE2 มันมีตั้งแต่ปีมะโว้แล้วทำไมเพิ่งมาเปิดตอนนี้ ไลบรารี libQt4Pas.so จะต้องคอมไพล์ด้วย qmake ด้วย options QMAKE_CXXFLAGS += -mstackrealign เอาละในฐานะ user อย่างผมจะไม่เหนื่อยต้องมาคอมไพล์แบบนี้เพราะมีคนทำไว้แล้ว

ไลบรารีตัวช่วยสำเร็จรูป

  • ตัวช่วยสำเร็จรูปจัดทำโดยคุณ Jan.Van.hijfte อยู่ที่ Free Pascal Qt4 Binding ซึ่งตอนนี้ผู้จัดทำเรียกเป็นรุ่น 2.4 แต่ผมใช้รุ่น 2.1 ซึ่ง libQt4Pas.so จะเป็นรุ่น 5.2.1 ตรงกับที่ติดตั้งผ่าน apt-get
  • มองหา X11 i386 Libray Binary ถ้า Lazarus เป็น 32 bit หรือ X11 x86-64 Libray Binary ถ้าเป็น 64 bit ดาวน์โหลดไฟล์มาแล้วแตกออก ผมใช้ Ark
libQt4Pas.so รุ่น 2.1

ติดตั้ง

  • ใช้สิทธิ์ผู้ดูแลระบบทำการ copy file => libQt4Pas.so, libQt4Pas.so.5, libQt4Pas.so.5.2 และ libQt4Pas.so.5.2.1 ไปไว้ที่ /usr/lib คือก็อปปี้ไปทับไลบรารีเดิมที่ติดตั้งผ่าน apt-get เมื่อ ls ดูจะเห็นดังรูปด้านล่าง
libQt4Pas.so ใน /usr/lib

เตรียม Lazaus

  • ผมดาวน์โหลด Lazarus แบบ subversion (svn) รุ่น 32774M เมื่อเรียบร้อยแล้วทำการคอมไพล์ดังนี้ ซึ่งใช้เวลาไม่นานนัก

$make PREFIX=/usr clean all LCL_PLATFORM=qt

$sudo make install

  • รัน Lazarus ผ่านคำสั่ง startlazarus ปรากฎว่าผ่าน ผมสังเกตว่าไม่มี gnu debugger (gdb) ติดตั้งมากับ PCLinuxOS ทำการติดตั้งด้วยคำสั่ง

$sudo apt-get install gdb

Lazarus บน PCLinuxOS
  • config ที่เมนู Tools > Options > Degubber เลือกดีบักเกอร์ เป็น GNU Debugger ตั้งพาทไปที่ /usr/bin/gdb ก็พร้อมที่จะเปิดโปรแกรมที่พัฒนามาลองรันดูได้ สำหรับ distro อื่นๆที่ใช้ KDE น่าจะเอาไปประยุกต์ใช้ได้ครับ

Leave a Reply

Your email address will not be published.