1

これは、私の問題を説明するために考えることができる最も基本的なlibpqの例についてです。ここでの目標は、エスケープされた文字列を印刷することだけです。

#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

セクション31.3.4のpgsql9.0のマニュアルでPQescapeLiteralを見つけました。:SQLコマンドに含めるための文字列のエスケープ。私はyumのlibpqとlibpq-develの最新バージョンを持っているので、それが定義されているはずだと確信しています。

誰かが私を正しい方向に向けることができれば、私はそれをいただければ幸いです。

4

1 に答える 1

1

私にとっては、PostgreSQL 9.0.1 ヘッダーで問題なく動作します。どのバージョンの postgresql ヘッダーとライブラリを使用していますか? PQescapeLiteral は明らかに 9.0 で追加されました: http://developer.postgresql.org/pgdocs/postgres/release-9-0.html#AEN104548

libpq.so はどこにあると思いますか? 非標準の場所にあるヘッダー ファイルを見つけるための -I スイッチを指定したコンパイラ コマンドを示していますが、ライブラリを見つけるための対応する -L スイッチはありません。

于 2011-01-07T00:19:59.837 に答える