vs2015 搭建libpqxx 環境


最近工作上一個項目要求查詢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

           LIBPQDLL=libpq.dll
           LIBPQLIB=libpqdll.lib 注釋掉,
       取消
           LIBPQDPATH=$(PGSQLSRC)\lib
           LIBPQDDLL=libpq.dll
           LIBPQDLIB=libpq.lib 注釋。
        把LIBPQDPATH=$(PGSQLSRC)\interfaces\libpq\Debug
           LIBPQDDLL=libpqd.dll
           LIBPQDLIB=libpqddll.lib 注釋掉,
        取消  
           LIBPQDPATH=$(PGSQLSRC)\lib
           LIBPQDDLL=libpq.dll
           LIBPQDLIB=libpq.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工具查找下。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM