2011-01-06 42 views
1

這是關於我能想到的最基本的libpq示例來說明我的問題。這裏的目標只是打印出逃逸的字符串。PQescapeLiteral未定義?

#include <iostream> 
#include <libpq-fe.h> 
#include <string.h> 

using namespace std; 

int main(){ 
    PGconn *db; 
    char connstring[] = "dbname=TheInternet"; 
    db = PQconnectdb(connstring); 
    char url[] = "http://www.goo'gle.com/"; 
    cout<<PQescapeLiteral(db, (const char *)url, (size_t) strlen(url))<<"\n"; 
} 

當我編譯:

g++ PQescapeLiteral_test.cpp -lpq 

甚至有:

g++ PQescapeLiteral.cpp -I/usr/include/pgsql:/usr/include/pgsql/server:/usr/include/pgsql/server/libpq -lpq 

我得到的錯誤:

PQescapeLiteral.cpp: In function ‘int main()’: 
PQescapeLiteral.cpp:12: error: ‘PQescapeLiteral’ was not declared in this scope 

我發現PQescapeLiteral手冊中的pgSQL用9.0節31.3.4 .:逃逸字符串f或包含在SQL命令中。我有yum最新版本的libpq和libpq-devel,所以我很確定它應該被定義。

如果有人能指出我在正確的方向,我會很感激。

回答

1

它適用於我,與PostgreSQL 9.0.1頭。你使用的是哪個版本的postgresql頭文件和庫? PQescapeLiteral顯然加入9.0:http://developer.postgresql.org/pgdocs/postgres/release-9-0.html#AEN104548

你在哪裏期待libpq.so是?用-I開關顯示一個編譯器命令,將頭文件定位在非標準位置,但沒有相應的-L開關來查找庫文件。

+0

libpqxx i686的1:3.0.2-4.fc13 Fedora的 libpqxx-devel的i686的1:3.0.2-4.fc13的Fedora ...的Postgres 8.4.5 ...這可能是它!我會嘗試安裝最新的:) – KeatsKelleher 2011-01-07 00:57:43