Tips: Compile resources

Posted

ในการเขียนโปรแกรม Gtk, C นั้นจะให้เร็วต้องมีหน้าจอที่ออกแบบด้วยโปรแกรม Glade ซึ่งเป็น gui สำหรับ Gtk โดยเฉพาะ แต่การโหลดไฟล์ glade เข้าโปรแกรมโดยตรงจะเป็นการอ้างอิงกับไฟล์ .glade ที่เรียกใช้ หากมีการเปลี่ยนแปลงภายนอกทำให้หน้าจอ gui เปลี่ยนไปด้วย อาจส่งผลถึงการทำงานโดยรวม ดังนั้นหากไม่ต้องการให้ใครเข้าไปเปลี่ยแปลงหน้าจอ gui ของระบบได้ต้องรวมเข้าโปรแกรมเสียก่อน เรียกว่า “compile resources”

หลักการ:

  • สร้างไฟล์ gresources.xml เพื่อเก็บข้อมูลเกี่ยวกับ resources ที่ใช้
  • ใช้ glib-compile-resources เพื่อคอมไพล์
  • รวมไฟล์ .c ที่ได้จากการคอมไพล์เข้ากับโปรแกรม

ตัวอย่าง

Compile:

glib-compile-resources —target=resources.c —generate-source gresources.xml

GCC Compile:

gcc -g -o gtk-play gtk-play.c gtk-video-renderer.c resources.c `pkg-config —cflags —libs gtk+-3.0` `pkg-config —cflags —libs gstreamer-1.0` `pkg-config —cflags —libs gstreamer-play-1.0` -lX11 -lgsttag-1.0 -rdynamic

อธิบายเพิ่ม:

resource.c คือ ไฟล์ gui ที่คอมไพล์แล้ว แต่ถ้าเราไม่ต้องการระบุเป็นออปชันให้กับ gcc ตอนคอมไพล์ ให้ระบุ #include “resources.c” ไว้ในส่วนหัวของ gtk-play.c ก็ได้

วิธีการระบุ #include “resurces.c” ในไฟล์ gtk-play.c นั้นมีข้อดีอย่างหนึ่ง คือ ไม่ต้องเพิ่มออปชันเวลาคอมไพล์

-rdynamic เป็นออปชันที่ต้องระบุหากมีเรียกฟังค์ชันจาก gui และที่โค้ดโปรแกรมต้องระบุ G_MODULE_EXPORT นำหน้าฟังค์ชันด้วย

การใช้งานในโปรแกรม

#include “resources.c”

data.builder = gtk_builder_new_from_resource(“/ui/mplayer.glade”);

/ui/mplayer.glade ในที่นี้เป็นพาธใน resources อย่าสับสนกับ / ที่เป็น root ของ system file ของลีนุกซ์

เป้าหมายถัดไป: ศึกษาเรื่อง gstreamer-play ซึ่งเป็น plugins สำหรับเล่นมัลติมีเดีย ที่น่าสนใจซึ่งอาจจะแก้ไขปัญหาการใช้ทรัพยากรของ GTK

Author