无法使用C ++连接到PostgreSQL

时间:2011-03-14 22:13:15

标签: c++ macos postgresql

我正在尝试在我的Mac上运行PostgreSQL。 PostgreQL本身工作正常,我可以创建数据库和表格,但当我尝试使用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,不应该有用吗?有人知道出了什么问题吗?

3 个答案:

答案 0 :(得分:4)

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

  6. 构建调试信息

    将它们放在一起,进行两个单独的构建步骤:编译和链接:

    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
    

答案 1 :(得分:0)

libpq-fe.h是一个用户库,而不是系统库,因此您应该使用"..."而不是<...>,如下所示:

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

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

答案 2 :(得分:0)

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