2013-05-12 222 views
0

我在Windows上構建PostgreSQL客戶端時遇到問題。實際上,它編譯得很好,並且在編譯器(編譯該應用程序的那個)上運行平穩,但在不同的計算機上(沒有postgresql服務器),它給我帶來了錯誤 - 它找不到* .dll。我通過將.dlls手動添加到應用程序的文件夾中來解決這個問題(我認爲這不是一種處理此問題的好方法,它只適用於32位機器)。PostgreSQL獨立應用程序

你能告訴我應該鏈接哪些圖書館,或者我該如何處理這種情況?

謝謝!

+0

PostgreSQL文檔說你需要什麼文件?在網上搜索「dll walker」。 – 2013-05-12 18:11:50

+0

@ThomasMatthews我認爲你的意思是Dependency Walker(depends.exe)來自http://dependencywalker.com/ – 2013-05-13 00:07:21

回答

1

你最有可能使用libpq.dll這個主要的PostgreSQL客戶端庫。您可以使用Dependency Walker來確定它需要哪些庫,但是從內存來看,它只需要與PostgreSQL bin目錄中的openssl DLL位於相同的目錄中,也可能需要zlib。我現在沒有一個方便的Windows盒子來檢查。 libpq及其與PostgreSQL bin文件夾的直接依賴關係應與您的應用程序捆綁在與應用程序可執行文件相同的目錄中。除了您的應用程序,它們不會被任何其他應用程序使用,也不會與系統中其他位置安裝的軟件發生衝突。

還有一個額外的依賴關係,我懷疑你可能會咬你:你需要安裝在目標機器上的適當版本的Microsoft Visual Studio C++ Redistributable。這是由PostgreSQL安裝程序自動安裝的。如果您在應用程序中捆綁libpq,則安裝程序也必須運行redist安裝程序。所需的版本取決於您正在使用的PostgreSQL版本(您忽略了這一點);它可以通過依賴walker來確定。

+0

我發現這個:http://www.postgresql.org/docs/9.2/interactive/install-windows-libpq。 html這與你正在談論的libpq.dll是一樣的嗎?不同的機器(arhitectures)如何:32位/ 64位。我應該提供不同的dll嗎? – dan 2013-05-13 12:38:09

+1

@Dan如果您的應用程序編譯爲64位平臺的本機64位可執行文件,那麼您必須捆綁64位libpq。如果您的應用程序在64位窗口上使用SysWow64作爲32位進程運行,則需要使用32位libpq。 – 2013-05-13 12:53:13

+0

因此,如果我在32位機器上編譯我的應用程序,則必須只提供32位DLL。 – dan 2013-05-13 13:02:16