无法使用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(或任何扩展)
这里是你可能想要这样做:
-
改变包含线没有路径。
#include "libpq-fe.h"
-
添加包括路径命令行
g++ -I/Library/PostgreSQL/8.4/include db.cpp
-
建立中介目标文件
g++ -I/Library/PostgreSQL/8.4/include db.cpp -c -o db.o
-
链接一起作为一个单独的步骤
g++ -L/Library/PostgreSQL/8.4/lib db.o -lpq
建立与使用
-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
libpq-fe.h
是用户库,而不是一个系统库,因此,你应该使用"..."
代替<...>
,像这样:
#include "/Library/PostgreSQL/8.4/include/libpq-fe.h"
看看this link。并确保libpq-fe.h
实际上可以由您的编译器找到。
我想我的编译器可以找到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
,做到这一点,你会看到。 祝你好运
因此,如果我的文件在家里,我应该只做g ++ -L/Library/PostgreSQL/8.4/include/libpq-fe.h?那也行不通。 – Confused 2011-03-14 22:34:24
-L/path/to/lib/dir not/path/to/header/file。 libpq位于何处? – Tim 2011-03-14 22:39:52
libpq-fe.h和libpq-events.h位于Library/PostgreSQL/8.4/include /中,但在Library/PostgreSQL/8.4/include/libpq – Confused 2011-03-14 22:46:46