GTK+ 프로그래밍 해보자
GTK+ 프로그래밍 해보자
착수하기 시작한 QEMU의 코드 리딩이었지만
막상 읽기 시작하거나 조사하면
이벤트 루프 처리의 흐름을 이해하기 위해서는 GLib의 동작을 알아야 할 것 같다는 것을 알았다.
GLib
출처 : 무료 백과 사전 "Wikipedia (Wikipedia)"
GLib는 C 언어로 작성된 크로스 플랫폼 유틸리티 라이브러리의 일종입니다.
【GTK+ 프로젝트의 일부】로서 스타트했지만, 현재는 다른 어플리케이션에서도 사용되고 있다.
당초는 저레벨의 코드를 넣기 위한 라이브러리로 되어 있었지만, 현재는 플랫폼간의 차이를 흡수하는 기능도 더해져,
다른 CPU, OS간의 어플리케이션의 이식성을 확보하는 라이브러리로서도 이용되고 있다.
Glib는 GTK+의 일부입니다.
그래서 GTK +는
GUI 애플리케이션을 작성하기 위한 툴킷(라이브러리) 중 하나
원래 김프라는 이미지 편집 소프트웨어를 만들기 위해 개발되었습니다.
GTK+는 Qt와 함께 Linux의 표준 GUI 툴킷처럼 보입니다.
대충 헬프라든지 보면 Windows에서 말한다면, MFC에 가까운 느낌일까.
GUI프로그래밍은 Windows 밭에서도 자랐기 때문에 리눅스 GUI프로그래밍은 전혀 미경험
조금 가는 길이지만, GTK +를 조금 만져 보는 것이 본 기사
이용환경
CentOS Linux release 7.7.1908 (Core)
gtk2-devel-2.24.31-1.el7.x86_64
GTK+를 CentOS에 설치
CentOS에서 GTK 2 패키지가 설치되어 있는지 확인하는 방법
rpm -q gtk2
rpm -q gtk2-devel
gtk2-devel은 포함되지 않았습니다.
그래서 gtk2-devel 설치 (yum에서)
~~~bash
yum install gtk2-devel
~~~
조 프로 (HELLO SKKS)
HelloGTK2.c#include <gtk/gtk.h>
static void destroy(GtkWidget *window, gpointer data)
{
/* メインループを終了 */
gtk_main_quit();
}
int main(int argc, char *argv[])
{
GtkWidget *window, *label;
/* GTK+ の初期化 */
gtk_init(&argc, &argv);
/* ウィンドウ(GtkWindow) の作成 */
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
/* ウィンドウの初期設定 */
gtk_window_set_title(GTK_WINDOW(window), "SKKS"); // title
gtk_widget_set_size_request(window, 200, 100); // window size
/* ウィンドウが消去されたときのコールバック関数を設定 */
g_signal_connect(G_OBJECT(window), "destroy",
G_CALLBACK(destroy), NULL);
/* ラベル(GtkLabel) の作成 */
label = gtk_label_new("Hello, SKKS!");
/* ラベルをウィンドウに追加 */
gtk_container_add(GTK_CONTAINER(window), label);
/* ウィンドウを表示 */
gtk_widget_show_all(window);
/* メインループ */
gtk_main();
return 0;
}
컴파일
gcc -Wall -o hello HelloGTK2.c `pkg-config --cflags --libs gtk+-2.0`
리눅스 밭의 사람에게는 상식일지도 모르지만, 조사했으므로 메모
쉘 스크립트에서 명령을`(그레이브 악센트, 악센 그라브, shft + @)로 묶으면 그 부분이 그 명령의 실행 결과로 바뀝니다.
즉, gtk+2.0에 필요한, -I 나 -L 등을 pkg-config 커멘드로 생성하고 있다
그럼 pkg-config란?
다음은 Wikipedia에서
pkg-config는, 환경 변수 PKG_CONFIG_PATH의 패스에 존재하는 *.pc 파일에 기록된 정보를 바탕으로, 빌드시에 필요한 캐릭터 라인을 돌려준다.
예를 들어, libaaa.so를/usr/local/lib/aaa/이하에 저장하고 헤더 파일을/usr/local/include/aaa/이하에 설치한 경우
libaaa.so를 이용한 소스를 컴파일 할 때 컴파일러에 lib와 include의 경로 등을 지정해야합니다.
그 경로가 환경마다 다른 경우를 고려하면 반드시 gcc -I/usr/local/lib/include -o a.c -L/usr/local/lib/aaa -laaa 가 성립되는 것은 아니다.
libaaa가 aaa.pc를 제공한다면,
pkg-config aaa --cflags
에서 문자열 -I/usr/local/lib/aaa를 얻고,
pkg-config aaa --libs
문자열 -L/usr/local/lib/aaa -laaa
실행 결과
CentOS 데스크톱으로 들어가서 더블 클릭
Reference
이 문제에 관하여(GTK+ 프로그래밍 해보자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/code2545Light/items/cda2e787ef6297022112
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#include <gtk/gtk.h>
static void destroy(GtkWidget *window, gpointer data)
{
/* メインループを終了 */
gtk_main_quit();
}
int main(int argc, char *argv[])
{
GtkWidget *window, *label;
/* GTK+ の初期化 */
gtk_init(&argc, &argv);
/* ウィンドウ(GtkWindow) の作成 */
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
/* ウィンドウの初期設定 */
gtk_window_set_title(GTK_WINDOW(window), "SKKS"); // title
gtk_widget_set_size_request(window, 200, 100); // window size
/* ウィンドウが消去されたときのコールバック関数を設定 */
g_signal_connect(G_OBJECT(window), "destroy",
G_CALLBACK(destroy), NULL);
/* ラベル(GtkLabel) の作成 */
label = gtk_label_new("Hello, SKKS!");
/* ラベルをウィンドウに追加 */
gtk_container_add(GTK_CONTAINER(window), label);
/* ウィンドウを表示 */
gtk_widget_show_all(window);
/* メインループ */
gtk_main();
return 0;
}
gcc -Wall -o hello HelloGTK2.c `pkg-config --cflags --libs gtk+-2.0`
Reference
이 문제에 관하여(GTK+ 프로그래밍 해보자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/code2545Light/items/cda2e787ef6297022112텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)