最近工作上一個項目要求查詢postgreSQL數據庫中數據做處理顯示,需要在Windows環境下使用,查了相關資料可以使用libpqxx的開源庫來做數據庫的登錄,查詢。
具體的數據庫登錄,查詢等,在這里不需贅述,網絡上有很多資料介紹,我也就不班門弄斧了,寫一個認為不錯的教程鏈接http://www.tutorialspoint.com/postgresql/postgresql_c_cpp.htm,希望對你有幫助。
下面就進入重點,libpqxx環境的搭建。(參考了其他博主的筆記http://www.cppblog.com/deajosha/archive/2015/11/07/211146.html)
1. 下載PostgreSql和libpgxx
PostgreSql下載地址:http://www.postgresql.org/download/ 選擇windows版本下的PostgreSql安裝包(x86和x64)。
libpgxx下載地址:https://github.com/dreamsxin/libpqxx (當然我是去這里下的http://pqxx.org/devprojects/libpqxx/doc/stable/html/Reference/)
libpgxx官網資料地址:http://pqxx.org/devprojects/libpqxx/doc/4.0/html/Reference/
libpgxx tutorial地址: http://pqxx.org/devprojects/libpqxx/doc/4.0/html/Tutorial/
2. 安裝PostgreSql
點擊安裝postgreSql安裝包。如果要編譯32位的libpgxx,請下載32位的PostgreSql安裝程序,一鍵安裝到即可。不過最新版的PostgreSql有個令人困擾的問題,那就是安裝到最后是會彈出Stack Builder選擇的問題,其實你如果沒有特殊的需要完全可以選擇取消在這里結束。當然你如果需要其他功能可以進入選擇。我只是需要Windows下c++接口實現數據庫連接和查詢等簡單功能於是在這里就結束了。
3. 編譯libpgxx4.0.1
3.1 解壓libpqxx4.0.1壓縮包,把win32\common-sample另存為win32\common, 使用ue編譯器打開win32\common文件,
修改PGSQLSRC的值為PostgreSql安裝的根目錄,如C:\Program Files (x86)\PostgreSQL\9.5。
把LIBPQINC=$(PGSQLSRC)\interfaces\libpq注釋掉,
取消
LIBPQINC=$(PGSQLSRC)\include的注釋。
把LIBPQPATH=$(PGSQLSRC)\interfaces\libpq\Release
取消
LIBPQDPATH=$(PGSQLSRC)\lib
取消
LIBPQDPATH=$(PGSQLSRC)\lib
3.2 將config\ample-headers\compile\VisualStudio2010\pqxx\目錄下的所有頭文件拷貝到include\pqxx目錄下;
將 config\sample-headers\libpq\9.0\pqxx\目錄下的所有頭文件拷貝到include\pqxx目錄下。
3.3 如果是編譯64位的libpqxx, 請使用ue編譯打開win32\vc-libpqxx.mak 文件,將
LINK_FLAGS_BASE=kernel32.lib ws2_32.lib advapi32.lib /nologo /dll /machine:I386 shell32.lib secur32.lib wldap32.lib
修改為
LINK_FLAGS_BASE=kernel32.lib ws2_32.lib advapi32.lib /nologo /dll /machine:x64 shell32.lib secur32.lib wldap32.lib
3.4 添加#include <algorithm>到src\largeobject.cxx文件的34行(否則在編譯時會報錯)。
3.5 選擇Visual Studio 2015下的Visual Studio Tools下的命令提示行工具(我使用的VS2015 開發人員命令提示,當然還可以使用X86,x64兼容工具命令提示符),並以管理員方式運行;
運行命令:
"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\nmake.exe" /f win32/vc-libpqxx.mak ALL.
編譯成功后,會將編譯輸出的靜態鏈接庫的debug/release及動態鏈接庫的debug/release文件放到lib目錄下如:
細心的朋友可能發現我的目錄里面多出了4個文件libeay32.dll,libiconv-2.dll,libintl-8.dll,ssleay32.dll。這幾個文件在我使用libpqxx編寫c++程序編譯時提示的缺少動態庫,這是在網上找的文件,放到這個目錄就好了。
最后,還有一個問題,那就是在編寫c++代碼的時候需要配置visual的解決方案,具體的添加附加頭文件,附加依賴什么的不在這里介紹了。需要提醒的是libpqxx最好選擇static版本的。因為本博主一開始選擇的非static版本的使用,編譯可以通過,就是在運行的時候報異常,困擾了很久。據本人推測應該是非static版本的缺少某些系統依賴的動態庫吧,也不再做深究,有興趣的朋友可以使用depends.exe工具查找下。