Postgres的c++接口早就改成libpqxx,libpq++在ubuntu14.04下不能編譯經過,爲了使用libpq++須要作一些修改html
1、下載libpq++-4.0.tar.gz並解壓linux
http://download.chinaunix.net/download/0006000/5978.shtmlios
百度網盤下載 連接: https://pan.baidu.com/s/18mkvnB3XINf4KG25T6Rlew 提取碼: sm8xc++
經過apt安裝pg的下載這個版本,解壓後直接編譯便可:sql
連接: https://pan.baidu.com/s/1JyQQESkm4IKsSdqS0FSm5g 提取碼: 9yntubuntu
經測試在ubuntu18.04+pg11.2函數
3、打開Makefilepost
修改POSTGRES_HOME=/opt/PostgreSQL/9.5 (你的postgresql安裝目錄)測試
修改CXXOPTS=-fPIC -DHAVE_NAMESPACE_STD -DHAVE_CXX_STRING_HEADER -DDLLIMPORT=""spa
64位系統必需加上-fPIC
4、打開pgdatabase.cc
在最前面包含stdlib.h文件名(不然atoi函數找不到)
5、make&sudo make install
6、cd /opt/PostgreSQL/9.5/lib
sudo ln -s libpq++.so.4.0 libpq++.so.4
/etc/ld.so.conf.d/ 或LD_LIBRARY_PATH加上庫搜尋路徑
並執行sudo ldconfig -v
或者在編譯的時候加上-Wl,-rpath=/opt/PostgreSQL/9.5/lib
7、測試
test.cpp(把mydb,mytable等修改一下)
#include <stdlib.h> #include <iostream> #include <libpq++.h> using namespace std; int main() { char query_string[256]= "SELECT * FROM mytable;"; PgDatabase data("dbname = mydb user=myuser password=mypass"); if (data.ConnectionBad()) { cout <<"connected failed" << endl; cout <<"Error is "<<data.ErrorMessage() << endl; exit(1); } if (! data.ExecTuplesOk(query_string)) { cout<<"Query Failed!" << endl; exit(1); } for(int k=0; k<data.Fields();k++)/**顯示字段名稱*/ { cout<<data.FieldName(k); cout <<" " ; } cout<<endl; for (int i = 0; i < data.Tuples();i++)/**取得查詢結果的記錄數量*/ { for(int k=0; k<data.Fields();k++) { cout << data.GetValue(i,k); cout <<" | " ; } cout<<endl; } return 0 ; }
編譯:
g++ test.cpp -o test -fPIC -DHAVE_NAMESPACE_STD -DHAVE_CXX_STRING_HEADER -DDLLIMPORT="" -I /opt/PostgreSQL/9.5/include -L/opt/PostgreSQL/9.5/lib -lpq++ -lpq -Wl,-rpath=/opt/PostgreSQL/9.5/lib
./test
增長:/opt/PostgreSQL/9.5/lib/pkgconfig/libpq++.pc
prefix=/opt/PostgreSQL/9.5 exec_prefix=${prefix} libdir=${exec_prefix}/lib includedir=${prefix}/include Name: libpq++ Description: a C++ API to the PostgreSQL database management system. Version: 4.0 Libs: -L${libdir} -L/opt/PostgreSQL/9.5/lib -lpq++ Cflags: -I${includedir} -I/opt/PostgreSQL/9.5/include
sudo cp libpq++.pc /usr/lib/x86_64-linux-gnu/pkgconfig/.
編譯指令可改成:
g++ test.cpp -o test -fPIC -DHAVE_NAMESPACE_STD -DHAVE_CXX_STRING_HEADER -DDLLIMPORT="" `pkg-config --libs --cflags libpq++ libpq` -Wl,-rpath=/opt/PostgreSQL/9.5/lib