[컴파일에러] Postgresql C-api를 static으로 컴파일시 에러?...

ssik425의 이미지

- Postgresql을 이용하여 DB를 컨트롤하는 App를 C언어를
이용하여 작성하였습니다. 기존에는 Shared Libray를 사용하였는데 별다른 이상없이 정상적으로 컴파일이 되었습니다.

그런데. 이걸 static으로 컴파일을 한번 해보려 하니.. 링크되어야 하는게 정말 많네요.. 혹 static으로 간단히 되는 방법은 없나요..

컴파일 옵션은 다음과 같습니다.

Quote:

gcc -I. -I/usr/include -static -g -DDB_POSTGRESQL -o $(TARGET) $(OBJ) -L/usr/lib -lpq

위처럼 하니 다음과 같은 에러가 발생합니다.

Quote:

: undefined reference to `pthread_mutex_unlock'
/usr/lib/gcc/i386-redhat-linux/4.0.1/libgcc_eh.a(unwind-dw2-fde-glibc.o)(.text+0x90f): In function `__register_frame_info_bases':
: undefined reference to `pthread_mutex_lock'
/usr/lib/gcc/i386-redhat-linux/4.0.1/libgcc_eh.a(unwind-dw2-fde-glibc.o)(.text+0x9f1): In function `__register_frame_info_table_bases':

/usr/lib/libpq.a(fe-secure.o)(.text+0xd9c): In function `pq_reset_sigpipe':
/usr/src/build/565044-i386/BUILD/postgresql-8.0.3/src/interfaces/libpq/fe-secure.c:1314: undefined reference to `pthread_sigmask'
/usr/lib/libpq.a(fe-secure.o)(.text+0xe6d): In function `pqsecure_write':
/usr/src/build/565044-i386/BUILD/postgresql-8.0.3/src/interfaces/libpq/fe-secure.c:410: undefined reference to `SSL_write'
/usr/lib/libpq.a(fe-secure.o)(.text+0xe84):/usr/src/build/565044-i386/BUILD/postgresql-8.0.3/src/interfaces/libpq/fe-secure.c:411: undefined reference to `SSL_get_error'
/usr/lib/libpq.a(fe-secure.o)(.text+0x105b): In function `client_cert_cb':
..
.
.
.

-static외에 다른 옵션은 없나요... -lkrb5 -lssl을 추가하여 컴파일을 해보았는데도. 역시나 다른 라이브러리를 계속 찾더군요..
계속이렇게 추가적으로 라이브러리를 추가해야하는지 아니면 다른방법이 있나요?

익명 사용자의 이미지

-static말고 그냥 libpgsql.a 뭐 이런걸 그냥 $(OBJ)안에 넣어주고 컴파일하면 되지 않나요?

ssik425의 이미지

libpq.a를 직접 포함하여 컴파일해도 마찬가지로 비슷한 에러가 납니다.

개발자들의 궁극적 비전은 ?

neogeo의 이미지

pthread 계열은 -lpthread 로 해주셔야 합니다.

static 컴파일은 당연히 각 라이브러리 별로 링크 해주셔야 합니다.

이런걸 간단하게 하기 위해 Makefile 이 존재하는것이지요.

postgresql 쪽의 Makefile 을 분석해보시면

쉽게 알아보실 수 있을겁니다.

Neogeo - Future is Now.

ssik425의 이미지

자답입니다. -static옵션등을 주어 컴파일해도 libpq.a가 많은 라이브러를
포함하여 컴파일되어 있기 때문에 libpq.a만 복사하여 컴파일 하는데
무리가 있었습니다. 해서 다음과 같은 방식으로 컴파일 해서 성공하였습니다.

1. postgresql을 소스로 다운 받아 컴파일 합니다. (install을 하지 않음)

2. 컴파일한 postgresql소스를 포함하려는 소스와 동일한 디렉토리에 위치하게 합니다.

3. 포함하려는 소스에서 libpq.a 위치를 postgresql 소스위치로 설정하여 줍니다. 다음과 같이
../postgresql/interpace/libpq/libpq.a

위와같은 방식으로 하면 별문제없이 컴파일이 가능합니다. 단 postgresql의 소스자체가 분량이 많기 때문에 용량이 커지는 문제가 조금 있습니다.

개발자들의 궁극적 비전은 ?

댓글 달기

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