2019独角兽企业重金招聘Python工程师标准>>>
Postgres的c++接口早就改为libpqxx,libpq++在ubuntu14.04下不能编译通过,为了使用libpq++需要做一些修改
一、下载libpq++-4.0.tar.gz并解压
http://download.chinaunix.net/download/0006000/5978.shtml
百度网盘下载 链接: https://pan.baidu.com/s/18mkvnB3XINf4KG25T6Rlew 提取码: sm8x
通过apt安装pg的下载这个版本,解压后直接编译即可:
链接: https://pan.baidu.com/s/1JyQQESkm4IKsSdqS0FSm5g 提取码: 9ynt
经测试在ubuntu18.04+pg11.2
三、打开Makefile
修改POSTGRES_HOME=/opt/PostgreSQL/9.5 (你的postgresql安装目录)
修改CXXOPTS=-fPIC -DHAVE_NAMESPACE_STD -DHAVE_CXX_STRING_HEADER -DDLLIMPORT=""
64位系统必需加上-fPIC
四、打开pgdatabase.cc
在最前面包含stdlib.h文件名(否则atoi函数找不到)
五、make&sudo make install
六、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
七、测试
test.cpp(把mydb,mytable等修改一下)
#include
#include
#include
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 "<
编译:
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