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