无法使用C++连接到PostgreSQL

问题描述:

我想在我的Mac上运行PostgreSQL。 PostgreQL本身工作正常,我可以创建数据库和表之类的东西,但是当我尝试用C++的东西,如连接到PostgreSQL:无法使用C++连接到PostgreSQL

#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,它不应该工作吗?有人知道出了什么问题吗?

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

因此,如果我的文件在家里,我应该只做g ++ -L/Library/PostgreSQL/8.4/include/libpq-fe.h?那也行不通。 – Confused 2011-03-14 22:34:24

+0

-L/path/to/lib/dir not/path/to/header/file。 libpq位于何处? – Tim 2011-03-14 22:39:52

+0

libpq-fe.h和libpq-events.h位于Library/PostgreSQL/8.4/include /中,但在Library/PostgreSQL/8.4/include/libpq – Confused 2011-03-14 22:46:46

libpq-fe.h是用户库,而不是一个系统库,因此,你应该使用"..."代替<...>,像这样:

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

看看this link。并确保libpq-fe.h实际上可以由您的编译器找到。

+0

我想我的编译器可以找到libpq-fe.h。将#include“/Library/PostgreSQL/8.4/include/libpq-fe.h”更改为#include“Library/PostgreSQL/8.4/include/libpq-fe.h”后,出现错误:'PGconn'未声明在此范围内 错误:'conn'未在此范围内声明。由于PGconn已被定义,这不是说编译器能找到libpq-fe.h吗? – Confused 2011-03-14 22:31:10

有同样的问题,你需要添加库的路径/etc/ld.so.conf,做到这一点,你会看到。 祝你好运