2013-05-12 155 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