Не удается подключиться к PostgreSQL с помощью C ++ - PullRequest
2 голосов
/ 15 марта 2011

Я пытаюсь запустить PostgreSQL на моем Mac.Сам PostgreQL работает нормально, и я могу создать базу данных, таблицу и прочее, но когда я пытаюсь подключиться к PostgreSQL, используя C ++, что-то вроде:

#include <stdio.h>
#include </Library/PostgreSQL/8.4/include/libpq-fe.h>
#include <string>

int     main() {
PGconn          *conn;
PGresult        *res;
int             rec_count;

conn = PQconnectdb("dbname=ljdata host=localhost user=dataman);

if (PQstatus(conn) == CONNECTION_BAD) {
 puts("We were unable to connect to the database");
exit(0);
} 

res = PQexec(conn, "update people set phonenumber=\'5055559999\' where id=3");

и скомпилировать что-то вроде:

g++ -lpq db.cpp -o db

Я получаю сообщение об ошибке ld: библиотека не найдена для -lpq

, и если я компилирую без lpq, я получаю

Undefined symbols:
  "_PQclear", referenced from:
      _main in ccpjNCAU.o
      _main in ccpjNCAU.o"

Я уже включил libpq-fe.h, не долженэто работает?Кто-нибудь знает, что пошло не так?

Ответы [ 3 ]

4 голосов
/ 15 марта 2011

g ++ не может найти библиотеку pq. Вы должны указать, где его искать, с большой буквы -L:

g++ -L/path/to/pq/lib -lpq db.cpp -o db

, где pq - это /path/to/pq/lib/libpq.a (или любое другое расширение)

Вот что вы, вероятно, хотите сделать:

  1. изменить строку включения, чтобы не иметь пути.

    #include "libpq-fe.h"
    
  2. Добавить включаемый путь к командной строке

    g++ -I/Library/PostgreSQL/8.4/include db.cpp
    
  3. Создание промежуточных объектных файлов

    g++ -I/Library/PostgreSQL/8.4/include db.cpp -c -o db.o
    
  4. Свяжите это вместе как отдельный шаг

    g++ -L/Library/PostgreSQL/8.4/lib db.o -lpq
    
  5. Сборка с отладочной информацией с использованием -g

Соберите все вместе, для двух отдельных этапов сборки: компиляция и ссылка:

g++ -I/Library/PostgreSQL/8.4/include db.cpp -c -g -o db.o
g++ -L/Library/PostgreSQL/8.4/lib db.o -lpq -o db
0 голосов
/ 17 апреля 2012

Была такая же проблема, вам нужно добавить путь к библиотеке к /etc/ld.so.conf, сделайте это, и вы увидите.Удачи

0 голосов
/ 15 марта 2011

libpq-fe.h - это пользовательская библиотека, а не системная библиотека, и поэтому вы должны использовать "..." вместо <...>, например:

#include "/Library/PostgreSQL/8.4/include/libpq-fe.h"

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...