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