lib 를 개인홈에 두고 컴파일하고 싶은데요.

nephro의 이미지

먼저, 제가 하고싶은일을, 간단한 C 프로그램을 php로 실행시켜 그림파일을 thumbnamil로 바꾸기 입니다.
그래서 C 로 프로그램을 짰는데, Imlib2 라는 lib 가 필요한 프로그램 입니다.

제 시스템(데비안 우디)에서는 Imlib2가 깔려있어서 아무런 문제없이 웹상에서 프로그램이 실행되는데, 웹호스팅을 받고 있는 제 홈페이지에서는 lib가 없다며
실행이 안되는 군요.
그래서, 홈페이지 계정안에 lib directory를 만들고 libImlib2.* 파일을 이곳에 복사하였습니다.
그다음에, 컴파일할때 라이브러리 위치를 알려주면 해결될것 같아서,

gcc -Wall -ggdb -L/home1/user/lib -o pic2thumb pic2thumb.c -lImlib2

하였는데, 작동을 안하네요. 여전히 lib가 없다는 말만 나오는군요.
어떡하면 해결할수 있을까요?
가르쳐 주세요.
감사합니다. :oops:
fatman의 이미지

우선 static library(예를 들면, imlib2.a)가 있는지를 먼저 확인을 해 보셔야 할 것 같습니다. 만약, 공유 library 형태(예를 들면 imlib2.so)라면 compile을 하더라도 imlib2 library가 실행파일 안에 들어가지 않을 수가 있습니다. 공유 library라면 imlib2를 모두 갖다 놓고, LD_LIBRARY_PATH에 해당 공유 library가 있는 디렉토리를 추가해 주셔야 할 것 같습니다.

허접한 답변이었습니다.

...

nephro의 이미지

Quote:
우선 static library(예를 들면, imlib2.a)가 있는지를 먼저 확인을 해 보셔야 할 것 같습니다. 만약, 공유 library 형태(예를 들면 imlib2.so)라면 compile을 하더라도 imlib2 library가 실행파일 안에 들어가지 않을 수가 있습니다.

답변 감사합니다.
확인해 보니, .a 와 .so 가 모두 있습니다. 위에 언급한 바와 같이 컴파일 하고 실행시키면, .so가 없다는 메시지가 뜹니다.
컴파일할때 static library를 포함시켜 컴파일하는 방법좀 가르켜 주세요.

실은 전공이 컴퓨터랑 전혀 관련 없어, 책과 인터넷으로 언어를 독학해서, 기초가 약하답니다.

감사합니다.

자유를 꿈꾸는자 고개를 들어 하늘을 보라.

feanor의 이미지

nephro wrote:

확인해 보니, .a 와 .so 가 모두 있습니다. 위에 언급한 바와 같이 컴파일 하고 실행시키면, .so가 없다는 메시지가 뜹니다.

컴파일할때 static library를 포함시켜 컴파일하는 방법좀 가르켜 주세요.

gcc -Wall -ggdb -L/home1/user/lib -o pic2thumb pic2thumb.c -lImlib2
대신
gcc -Wall -ggdb -o pic2thumb pic2thumb.c /home1/user/lib/libImlib2.a
처럼 해 주시면 될 것 같습니다.

gcc는 소스 파일이 아닌 파일 이름이 명령행에 나타나면 그 파일을 링커로
넘겨줍니다.

--feanor

nephro의 이미지

Quote:
gcc -Wall -ggdb -o pic2thumb pic2thumb.c /home1/user/lib/libImlib2.a

답변 감사합니다.
가르쳐 주신대로 했는데, 에러메시지가 난무해서, 오히려 제가 죄송스럽습니다.
에러메시지는 다음과 같습니다.

Quote:
libImlib2.a(api.o): In function `imlib_create_scaled_image_from_drawable':
api.o(.text+0x1f82): undefined reference to `XCreatePixmap'
api.o(.text+0x1fb8): undefined reference to `XCreatePixmap'
api.o(.text+0x1fd1): undefined reference to `XCreateGC'
...

shared library로 컴파일할때는 에러가 안나는데, static library를 포함시키면
에러가 나는 이유가, 제 생각에는 static lib. 내부의 함수들이 다른 lib.들을 필요로 하기 때문이 아닐까요?
그렇다면, header file들을 좀 손봐야 할까요?
음... 산넘어 산이로군요.

자유를 꿈꾸는자 고개를 들어 하늘을 보라.

sangwoo의 이미지

imlib2 가 의존하는 라이브러리들 중 설치되지 않은 녀석들이 있는 것 같습니다.
확인하셔서 설치해주셔야 할 것 같네요.
imlib2.so 나 imlib2.a 를 ldd로 보시면 어떤 결과가 나오나요?

----
Let's shut up and code.

feanor의 이미지

statc linking을 강제할 때 명령행에 .a 파일의 경로를 직접 적어주는 것에는 분명 문제가 없습니다. Imlib2가 왜 에러를 내는지는 잘 모르겠지만 -lX11 같은 것이 필요할 것 같기도 합니다.

--feanor

nephro의 이미지

Quote:
imlib2.so 나 imlib2.a 를 ldd로 보시면 어떤 결과가 나오나요?

감사합니다.
결과는 다음과 같습니다.

Quote:
ldd libImlib2.so
libdl.so.2 => /lib/libdl.so.2 (0x40065000)
libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0x40068000)
libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x40076000)
libttf.so.2 => /usr/lib/libttf.so.2 (0x40150000)
libc.so.6 => /lib/libc.so.6 (0x40179000)
libm.so.6 => /lib/libm.so.6 (0x40296000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)

ldd libImlib2.a
not a dynamic executable

자유를 꿈꾸는자 고개를 들어 하늘을 보라.

nephro의 이미지

Quote:
공유 library라면 imlib2를 모두 갖다 놓고, LD_LIBRARY_PATH에 해당 공유 library가 있는 디렉토리를 추가해 주셔야 할 것 같습니다.

결국 static lib.를 포함하여 compile하는데 실패하였습니다.
Imlib2 source를 참고하여 이것 저것 해 보았는데 안되었습니다. 그래서,
공유 lib.를 홈페이지에 갖다놓고 사용하는 방법을 이용하고 싶은데, 님의 말씀을 잘 이해하지 못하겠습니다. 좀 더 풀어서 설명해 주시겠습니까?
감사합니다.

자유를 꿈꾸는자 고개를 들어 하늘을 보라.

akbar의 이미지

nephro wrote:
Quote:
공유 library라면 imlib2를 모두 갖다 놓고, LD_LIBRARY_PATH에 해당 공유 library가 있는 디렉토리를 추가해 주셔야 할 것 같습니다.

결국 static lib.를 포함하여 compile하는데 실패하였습니다.
Imlib2 source를 참고하여 이것 저것 해 보았는데 안되었습니다. 그래서,
공유 lib.를 홈페이지에 갖다놓고 사용하는 방법을 이용하고 싶은데, 님의 말씀을 잘 이해하지 못하겠습니다. 좀 더 풀어서 설명해 주시겠습니까?
감사합니다.

공유 lib.를 홈디렉토리에 갖다놓고 아래 명령을 실행하세요

(본셀이고 홈디렉토리가 /home/My 일 경우 )
export LD_LIBRARY_PATH=/home/My

nephro의 이미지

Quote:
export LD_LIBRARY_PATH=/home/My

감사합니다.
프로그램이 잘 작동됩니다. 몇가지 문제점이 추가로 발견되었는데, 열심히 삽질해 보겠습니다. 감사합니다.

자유를 꿈꾸는자 고개를 들어 하늘을 보라.

댓글 달기

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