gobject 사용시 컴파일 방법에 대해서 질문 드립니다.

yerang0427의 이미지

구글링 해본 결과 한글 문서가 별로 없더라구요,
영어로 된 문서들을 살펴보니

사용하는 기능별로 옵션을 다르게 주어 컴파일을 해야 한다고 하더라구요.
처음에는 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 ~~~` 옵션 순서가 중요한것 같던데 정확한 가이드라인좀 부탁드리겠습니다.

shint의 이미지

자바스크립트를 사용하는 방법도 있는거 같습니다.

필요한게 있을 수 도 있으니. 한번 구경해보세요.

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

twinwings의 이미지

yerang0427 wrote:
--cflags --libs 의 옵션의 의미도 솔직히 잘모르겠고...

그 의미부터 먼저 찾아보세요. 해당옵션은 pkg-config에 들어가는 옵션입니다.

보아하니 네임맹글링, 컴파일, 링크, 오브젝트(컴파일산출물)이 무엇인지 모르는 것 같습니다.

pkg-config도 왜 쓰는지 모르시는 것 같구요. gcc도 잘 다루시지 못하는 것 같습니다.

인터넷에 영문자료가 별로 없는 이유는 질문자가 궁금해 하는 부분이 gtk(GObject, Glib) 라이브러리 자체보다는,

기초적인 것이라 다른 키워드를 검색해야 되기 때문입니다.

> gcc, link, include or include path, lib

등의 키워드로 검색해보세요. 또 GCC man page의

> -I, -L

옵션도 검색해보세요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.