gtk+1.2 하고 2.0 서로 호환성있게 하려면 어떻게 해야 하는가요

ins878의 이미지

안녕하세요. 요세 방학이라 gtk를 이용해서 x-window 프로그래밍을 하고 있는데요~ 한가지 궁금한 점이 있어서 이렇게 글을 올립니다.

현재 gtk+ 1.2 하고 gtk+ 2.0 이 있잖아요. gtk+ 1.2로 만든 것을 gtk+ 2.0에서 컴파일을 하니깐 에러가 많이나던데요... gtk+ 1.2 하고 gtk+ 2.0하고 많이 틀려서 서로가 혼자성이 없는 것 같더군요.
현재 GNOME도 그렇고 대부분의 x-window프로그램이 gtk+ 2.0 이상을 사용해서 만드는 것 같습니다. 그래서 질문드리는데요. 만약 gtk+ 1.2로 만든 것을 gtk+2.0에서 수정없이 컴파일 하려면 어떻게 해야하는 가요. 즉, 프로그램을 옛날 x-window용으로 gtk+1.2로 만들었다면, 현재 GTK+ 2.0으로 구성된 x-window에서 에러없이 컴파일 하려면 어떻게 해야 하는지... 답변 좀 부탁드립니다.

요약하면, gtk+1.2를 이용하여 만든 프로그램을 옛날 X-window와 현재 X-window에서 에러없이 컴파일 하려면 어떻게 해야하는지... 답변 좀 해주세요. 꼭 부탁드립니다.

랜덤여신의 이미지

gtk 1.x 로 만든 프로그램은 컴파일 해 봐야 gtk 1.x 어플밖에는 되지 못하는 걸로 알고 있습니다.
그래서 mplayer gtk 2.x 패치같이 소스 자체를 gtk 1.x 대응에서 gtk 2.x 대응으로 바꿔주는 패치가 존재하는 거겠죠.

progcom의 이미지

소스에서 GTK 관련 부분을 직접 수정해줘야 합니다.
메이져 버전을 올린건, 호환성을 포기한 것이지요.

단지.. X-Window가 예전거냐 아니냐는 상관이 없습니다.
새 X에 GTK+1.2 라이브러리를 추가로 설치하면 문제 없이 돌아갑니다.
예전 X에도 GTK+2 라이브러리를 설치하면 GTK+ 2.x로 작성한 프로그램이 돌아갑니다.

한 시스템에 GTK+1.2와 GTK+2가 동시에 존재할 수 있습니다.
(라이브러리 버전이 다릅니다)

hys545의 이미지

progcom wrote:
소스에서 GTK 관련 부분을 직접 수정해줘야 합니다.
메이져 버전을 올린건, 호환성을 포기한 것이지요.

단지.. X-Window가 예전거냐 아니냐는 상관이 없습니다.
새 X에 GTK+1.2 라이브러리를 추가로 설치하면 문제 없이 돌아갑니다.
예전 X에도 GTK+2 라이브러리를 설치하면 GTK+ 2.x로 작성한 프로그램이 돌아갑니다.

한 시스템에 GTK+1.2와 GTK+2가 동시에 존재할 수 있습니다.
(라이브러리 버전이 다릅니다)


추가로 둘은 이름이 다릅니다.
1.2는 그냥 gtk
2.x는 gtk2로 구분됩니다.

즐린

ins878의 이미지

답변 잘 봤습니다. 현재 gtk 2.0 에 gtk 1.2 라이브러리를 설치하려고 하니깐 자꾸 구 버젼이라고 의존성에 걸린다고 하더군요. 그래서 의존성을 무시하고 설치했습니다. 참고로 페도라 코어 3입니다.
그런다음에 gtk 1.2용 응용프로그램을 컴파일하니깐, gtk 1.2를 찾을 수 없다면서 에러가 나는데...
의존성을 무시하고 설치해서 그런가요? 아니면, 무슨 작업을 더 해야하는가요?
다시 한번 답변부탁드립니다.

Prentice의 이미지

의존성 같은 것을 무시하시면 안되죠.

데비안의 경우 GTK1과 GTK2가 공존할 수 있습니다. Fedora에서도 안될리는 없다고 생각합니다. 정확히 어떤 메시지가 나오던가요? GTK1 설치는 구체적으로 어떻게 하셨나요?

참고로 프로그램을 컴파일하기 위해서는 libgtk*-devel과 같은 것도 깔아주셔야 합니다.

ins878의 이미지

gtk+ 1.2를 설치하려고 하니깐, 현 버젼보다 높은 버젼이 설치되어 있다고 안되더군요. 어떻게 해야하는지... 다시 한번 답변 부탁드립니다.

Prentice의 이미지

스무고개는 싫어요. :( 더 구체적으로 최대한 자세히 (!!!) 말씀해주시기 바랍니다.

원래 설치돼있던 GTK1의 버젼은 어떻게 되고, 설치하시려뎐 GTK1의 버젼은 어떻게 되나요?

ins878의 이미지

죄송합니다. 처음부터 자세하게 설명을 했어야 하는데...

페도라 코어 1을 쓰면서 gtk+1.2로 간단한 프로그램을 만들었습니다. 아주 간단한 프로그램요~, 거기에는 /usr/include안에 gtk+1.2하고 gtk2.0 이 있더군요. 그래서 gtk+1.2로 만든 것을 아무 에러없이 설치하고 사용할 수 있었습니다.

그런데, 페도라 코어 3으로 업하고 나서 보니간 /usr/include에 gtk2.0 만 있더군요. 그래서 gtk+1.2 하고 gtk+1.2-devel인가? 페도라 코어 1에 있는 것을 설치하려고 하니깐, 현재 상위버젼이 설치되어 있다고 설치가 안되더군요. 상위 버전이라는 것이 gtk2.0을 말하는 것 같은데~ 지금 gtk+1.2로 만든 프로그램을 구동시켜야 하는데..., 어떻게 해야 하는지 잘 모르겠습니다.

즉, 요점을 말하자면, gtk+1.2 라이브러리를 설치하려고 하니깐 상위 버전이 설치되어 있다고 해서 설치가 안됩니다. 상위 버전이 gtk 2.0 인 것 같은데, 페도라 코어 1처럼 gtk+1.2 하고 gtk2.0하고 같이 쓰러면 어떻게 해야 하는지... 답변 좀 부탁드립니다.

Prentice의 이미지

> 상위 버전이라는 것이 gtk2.0을 말하는 것 같은데

아닐 것 같습니다. gtk+-1.2의 상위버젼을 말하는 거다에 한표 던집니다.

현재 설치돼있는 GTK1의 버젼에 맞는 GTK1-devel을 설치해주셔야 할 것 같습니다.

다시 한번 부탁드립니다. 원래 설치돼있던 GTK1의 버젼은 정확히 어떻게 되고, 정확히 어떤 GTK1-devel을 설치하려 하셨는지 더 자세히 말씀해주시기 바랍니다.

설마 페도라 코어1에 들어있던 패키지를 설치하시려던 것은 아니겠죠? 페도라 코어3용 패키지를 설치하신다면야 문제가 없지 않을까요..?

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.