Здесь простая программа, которая помимо включения заголовочного файла также запрашивает таблицу test в схеме test , которая имеет два поля firstname и фамилия .Это гарантирует, что не только включаемый файл будет найден, но и компоновщик найдет дополнительные библиотеки:
Простая тестовая программа
#include <libpq-fe.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
int lib_ver = PQlibVersion();
printf("PQlibVersion: %d\n", lib_ver);
PGconn *conn = PQconnectdb("user=stephan password=mypwd dbname=postgres");
if (PQstatus(conn) == CONNECTION_BAD) {
fprintf(stderr, "Can't connect to Postgres: %s\n", PQerrorMessage(conn));
PQfinish(conn);
exit(-1);
}
PGresult *res = PQexec(conn, "SELECT * FROM test.test");
if (PQresultStatus(res) == PGRES_TUPLES_OK) {
printf("\n %-10s %-10s\n", PQfname(res, 0), PQfname(res, 1));
printf("-------------------------\n");
int rows = PQntuples(res);
for(int i=0; i<rows; i++) {
printf("[%d]: %-10s %-10s\n", i, PQgetvalue(res, i, 0), PQgetvalue(res, i, 1));
}
}
PQclear(res);
PQfinish(conn);
return 0;
}
Build
Это можно построить с помощью следующей командной строки:
gcc -Wall -Wextra -I "C:\PostgreSQL\pg10\include" -L "C:\PostgreSQL\pg10\lib" query.c -lpq -o query
Вывод тестового прогона
Объяснение аргументов компилятора
+--------------+----------------------------------------------------------------------+
| argumet | meaning |
+--------------+----------------------------------------------------------------------+
| -Wall | switches on many warnigs |
| -Wextra | switches on additional warnings like unused parameters |
| -I _xxx_ | searches for additional include files in the directory _xxx_ |
| -L _yyy_ | looks in directory _yyy_ for additional libraries |
| -l_zz_ | links library _zz_ |
| -o _name_ | the resulting program is called _name_.exe instead of a.exe |
+--------------+----------------------------------------------------------------------+
Порядок библиотек
Порядок важен при связывании с библиотеками.Чтобы избежать ошибок undefined reference , аргумент -lpq должен идти после исходных файлов .c.
Как найти каталоги include и lib?
Следующие команды выводят каталог include и lib для Postgres:
pg_config --includedir
pg_config --libdir
В качестве альтернативы используйте Window File Explorer, перейдите в каталог установки Postgres и найдите include и lib каталогов.