2013-04-12 4 views
0

У меня есть следующий код:Linker ошибка в C при использовании Postgres

#include <stdio.h> 
#include <stdlib.h> 
#include <libpq-fe.h> 

int main(int argc, char* argv[]) 
{ 
//Start connection 
PGconn* connection = PQconnectdb("host=webcourse.cs.nuim.ie dbname=cs621 sslmode=require user=ggales password=1234"); 

if (PQstatus(connection) ==CONNECTION_BAD) 
{ 
printf("Connection error\n"); 
PQfinish(connection); 
return -1; //Execution of the program will stop here 
} 
printf("Connection ok\n"); 
//End connection 
PQfinish(connection); 
printf("Disconnected\n"); 


return 0; 
} 

Когда я бегу, я получаю следующее сообщение об ошибке:

/tmp/cc73kO0N.o: In function `main': 
main.c:(.text+0x15): undefined reference to `PQconnectdb' 
main.c:(.text+0x25): undefined reference to `PQstatus' 
main.c:(.text+0x40): undefined reference to `PQfinish' 
main.c:(.text+0x5d): undefined reference to `PQfinish' 
collect2: error: ld returned 1 exit status 

Это странно, так как PQconnectdb и т.д., все функции, которые определены в libpq-fe.h, которые я уже включил в код.

Любая помощь будет большой благодарностью.

ответ

1

#include <libpq-fe.h> не ссылается на библиотеку, он содержит только информацию о функциях и типах данных, которые предоставляет библиотека.

Вы можете указать компоновщику, где ссылки, объявленные в libpq-fe.h, действительно могут быть найдены.

Если вы используете Makefile для компиляции кода, вы должны добавить -lpq в ваш LDFLAGS или ссылку.

Отправьте команду, которую вы выполняете, чтобы скомпилировать, чтобы предоставить нам дополнительную информацию.

+0

На Mac есть '/ usr/lib/libpq.dylib' (где' .dylib' является аналогом '.so' на Linux и' .dll' в Windows). Библиотека может быть такой же простой, как '-lpq'. –

+0

@JonathanLeffler Правильно, это libpq, просто '-lpq'. –

Смежные вопросы