gobject 사용시 컴파일 방법에 대해서 질문 드립니다.
구글링 해본 결과 한글 문서가 별로 없더라구요,
영어로 된 문서들을 살펴보니
사용하는 기능별로 옵션을 다르게 주어 컴파일을 해야 한다고 하더라구요.
처음에는 gobject를 이용해 object 와 objectclass 를 생성하는 함수를 구현해
cflags libs 옵션을 gtk3.0로 주어 컴파일이 되었습니다.
gcc `pkg-config --cflags gtk+-3.0` example.c `pkg-config --libs gtk+-3.0` -c -o output 이던가.....
그런데 프로퍼티 설정하는 함수를 추가하니 컴파일이 되지 않더군요...
기능별로 참조해야하는 헤더파일의 경로 옵션을 다르게 주어야 한다고 하는것 같은데
실제로 어떻게 주어야하는지 모르겠더군요
--cflags --libs 의 옵션의 의미도 솔직히 잘모르겠고...
제가 gobject의 기능을 썻으니 그에 따른 헤더파일 옵션을 지정해 주어야하는건 알겠는데
이걸 실제로 어떻게 하는지 잘모르겠습니다 막막하네요,
$ pkg-config --cflags --libs gobject-2.0 를통해 경로 확인후 그걸 옵션으로 주라는데
말로만 설명되어있고 실제로 어떻게 하는지 값이 안나와 있네요.
#include<glib-object.h> #include<stdio.h> #define GAME_OBJ_TYPE (game_obj_get_type()) G_DECLARE_FINAL_TYPE (GameObj, game_obj, GAME, OBJ, GObject) struct _GameObj { GObject parent_instance; int n; /* instance members */ }; /* will create viewer_file_get_type and set viewer_file_parent_class */ G_DEFINE_TYPE (GameObj, game_obj, G_TYPE_OBJECT) static void game_obj_constructed (GObject *obj) { /* update the object state depending on constructor properties */ /* Always chain up to the parent constructed function to complete object * initialisation. */ G_OBJECT_CLASS (game_obj_parent_class)->constructed (obj); } static void game_obj_class_init (GameObjClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->constructed = game_obj_constructed; printf("class init\n"); } static void game_obj_init(GameObj *self) { printf("obj init\n"); } enum { USER_LIST = 1, MAP, N_PROPERTIES }; static GParamSpec *obj_properties[N_PROPERTIES] = { NULL, }; static void game_obj_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { GameObj *self = GAME_OBJ_TYPE (object); switch (property_id) { case USER_LIST: g_free (self->priv->user_list); self->priv->userlist = g_value_dup_string (value); g_print ("userlist: %s\n", self->priv->filename); break; default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }; static void viewer_file_class_init (ViewerFileClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->set_property = viewer_file_set_property; object_class->get_property = viewer_file_get_property; obj_properties[PROP_FILENAME] = g_param_spec_string ("filename", "Filename", "Name of the file to load and display from.", NULL /* default value */, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE)); obj_properties[PROP_ZOOM_LEVEL] = g_param_spec_uint ("zoom-level", "Zoom level", "Zoom level to view the file at.", 0 /* minimum value */, 10 /* maximum value */, 2 /* default value */, G_PARAM_READWRITE)); g_object_class_install_properties (object_class, N_PROPERTIES, obj_properties); } int main(){ GameObj *game = g_object_new (GAME_OBJ_TYPE, NULL); game_obj_set_property(G_OBJECT(game,"USER_LIST","luis,zhao"); };
코드는 이거구요 솔직히 어떤헤더파일을 써야하고 gcc 옵션을 어떻게 줘야할지 잘모르겠습니다..
너무막막해 여기에 올려 여쭤봅니다 ㅠ_ㅠ
답변부탁드립니다 ㅠㅠㅠ
그리고 컴파일시 `pkg-config ~~~` 옵션 순서가 중요한것 같던데 정확한 가이드라인좀 부탁드리겠습니다.
한번 찾아봤습니다.
자바스크립트를 사용하는 방법도 있는거 같습니다.
필요한게 있을 수 도 있으니. 한번 구경해보세요.
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
yerang0427 wrote: --cflags -
그 의미부터 먼저 찾아보세요. 해당옵션은 pkg-config에 들어가는 옵션입니다.
보아하니 네임맹글링, 컴파일, 링크, 오브젝트(컴파일산출물)이 무엇인지 모르는 것 같습니다.
pkg-config도 왜 쓰는지 모르시는 것 같구요. gcc도 잘 다루시지 못하는 것 같습니다.
인터넷에 영문자료가 별로 없는 이유는 질문자가 궁금해 하는 부분이 gtk(GObject, Glib) 라이브러리 자체보다는,
기초적인 것이라 다른 키워드를 검색해야 되기 때문입니다.
> gcc, link, include or include path, lib
등의 키워드로 검색해보세요. 또 GCC man page의
> -I, -L
옵션도 검색해보세요.
댓글 달기