【问题标题】:Poco as static library with dynamic runtime requires import library of DLL?Poco 作为具有动态运行时的静态库需要 DLL 的导入库吗?
【发布时间】:2016-10-22 14:04:26
【问题描述】:

我正在尝试在我的项目中使用 Poco 作为具有动态运行时的静态库。我已经下载了 Poco 1.7.3 的完整源代码,并使用 buildwin.bat 脚本使用我自己编译的 OpenSSL 1.0.2h 共享库(即调整了 buildwin.bat 中的路径)来编译库。

通过buildwin.bat 140 build static_md debug Win32 nosamples notests msbuild 生成PocoXYZmd.lib 工作正常。

但是,当我尝试在我自己的项目中链接 PocoXYZmd.lib 时,链接器会搜索 PocoXYZ.lib,这是 PocoXYZ.dll 的导入库。

使用 shared 构建 Poco 并在链接器搜索路径中提供 PocoXYZ.lib 导入库,我在已定义 Poco 符号时遇到错误(显然)。

是我遗漏了一些重要的东西还是 Poco 的构建脚本中的错误?


我已将 Poco 配置为仅构建以下组件:Foundation、XML、JSON、Util、Net、Crypto、NetSSL_OpenSSL。

此外,我不得不调整 Crypto 和 NetSSL_OpenSSL 的 v140 vcxproj 文件以链接到 libeay32.libssleay32.lib(OpenSSL DLL 的导入库)而不是 libeay32md.libssleay32md.lib(根据 OpenSSL 1.0.2h 构建脚本,不知道这些可能来自哪里)。

我在 Windows 7 上使用 Visual Studio 2015 Update 2,在 32 位 Visual Studio 开发人员提示中执行所有操作。

【问题讨论】:

    标签: windows static-linking poco-libraries


    【解决方案1】:

    重读Poco文档后,终于找到了解决办法:

    在 Windows 上静态使用 Poco 时,必须在使用 Poco 编译库/应用程序时指定 POCO_STATIC,否则 Poco 标头中的多个 #pragma comment 指令将默默地强制链接到 Poco 的 DLL 版本。

    http://pocoproject.org/docs/99150-WindowsPlatformNotes.html

    谢谢,RTFM。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-11
      • 1970-01-01
      相关资源
      最近更新 更多