繁体   English   中英

在C ++中使用libpq ++ postgresql进行静态链接

[英]Static linking of libpq++ postgresql in C++

我正在将一个应用程序从MySQL移动到Postgres。 当我尝试编译连接到数据库的简单应用程序时,我可以将它与libpq.lib链接并成功编译和执行。 但是,这要求我在我的程序目录中包含大约8个.dll文件,这非常令人恼火。 有没有办法静态链接libpq.lib所以我不需要任何.dll文件? 我在Windows7 x64上,我正在尝试构建一个可在x64和x86窗口上运行的独立于架构的应用程序。 我使用的是libpq版本8.4.9.1。 谢谢!

更新:我尝试将#define PQ_STATIC-static添加到链接器标志。 我也从源代码编译了libpq.a ,但上面都没有。

Libpq需要一些非常大的库,比如用于加密连接的openssl,用于压缩的zlib,用于字符集转换的iconv等。你必须将它们全部编译为静态库,然后将libpq编译为静态库,然后静态编译。 我认为收益太少太过分了。

有一个商业工具, PgWare Alloy 4 ,可用于将DLL与EXE合并。 我想它只是将所有合并的文件提取到临时目录,然后从这个目录运行你的程序。

一般来说,有两种库。 一个用于动态链接,另一个用于静态链接。 在您的情况下,您可能正在链接与为动态链接编译的库。 所以,你需要的是用于静态链接的库。 在许多情况下,此类文件名为*_s.lib表示可静态链接的库。

在Linux中, .a文件是静态库。 一旦您与这些链接,您将不需要它们在运行时。 而在Windows中,您始终使用.lib文件进行编译和链接。 在编译阶段,您不会发现任何差异。 其中一些.lib文件包含实际代码。 这些是静态库。 其他包含指向单独.dll实现的指针。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM