PostgreSQL libpq C 라이브러리 사용 시 오류 해결하기

스폰서 링크
C/C++언어
스폰서 링크

PostgreSQL libpq로 프로그램을 작성해서 컴파일할 때 일어나는 오류를 해결하는 방법을 소개합니다.

스폰서 링크

샘플 소스

다음 소스를 pgsql_sample01.c 파일 명으로 저장합니다.

컴파일 (include 참조 오류)

소스에서 사용한 libpq 함수에 대한 include 파일을 지정하지 않으면 다음과 같은 오류가 발생합니다.

# gcc -o pgsql_sample01 pgsql_sample01.c
pgsql_sample01.c:3:10: fatal error: libpq-fe.h: 그런 파일이나 디렉터리가 없습니다
 #include <libpq-fe.h>
          ^~~~~~~~~~~~
compilation terminated.

오류 없이 컴파일하려면 “-I/usr/pgsql-12/include -I/usr/pgsql-12/include/internal” include패스 옵션을 포함해야 합니다.

컴파일 (라이브러리 참조 오류)

소스에서 사용한 libpq 함수에 대한 라이브러리 파일 또는 위치를 지정하지 않으면 다음과 같은 오류가 발생합니다.

# gcc -I/usr/pgsql-12/include -I/usr/pgsql-12/include/internal -o pgsql_sample01  pgsql_sample01.c
/tmp/cc9FazZv.o: In function `main':
pgsql_sample01.c:(.text+0xe): undefined reference to `PQconnectdb'
pgsql_sample01.c:(.text+0x1e): undefined reference to `PQstatus'
pgsql_sample01.c:(.text+0x2f): undefined reference to `PQerrorMessage'
pgsql_sample01.c:(.text+0x57): undefined reference to `PQfinish'
pgsql_sample01.c:(.text+0x72): undefined reference to `PQexec'
pgsql_sample01.c:(.text+0x82): undefined reference to `PQresultStatus'
pgsql_sample01.c:(.text+0xb1): undefined reference to `PQclear'
pgsql_sample01.c:(.text+0xbd): undefined reference to `PQfinish'
pgsql_sample01.c:(.text+0xd3): undefined reference to `PQntuples'
pgsql_sample01.c:(.text+0xf5): undefined reference to `PQgetvalue'
pgsql_sample01.c:(.text+0x115): undefined reference to `PQclear'
pgsql_sample01.c:(.text+0x121): undefined reference to `PQfinish'
collect2: error: ld returned 1 exit status

오류 없이 컴파일하려면 “ -L/usr/pgsql-12/lib -lpq” 옵션을 지정해야 합니다.

컴파일 (정상)

# gcc -I/usr/pgsql-12/include -I/usr/pgsql-12/include/internal -L/usr/pgsql-12/lib -lpq -o pgsql_sample01  pgsql_sample01.c
# ls
pgsql_sample01  pgsql_sample01.c

실행하기

실행 결과는 다음과 같습니다.

# ./pgsql_sample01
PostgreSQL 12.7 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
제목과 URL을 복사했습니다