ubuntu14.04下使用libpq++

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

相關文章
相關標籤/搜索