【问题标题】:Missing libcrypto.lib in CMake build of Poco projectPoco 项目的 CMake 构建中缺少 libcrypto.lib
【发布时间】:2020-06-11 05:44:43
【问题描述】:

Poco Libraries 可以非常强大和有用......但也很难构建:-(我现在已经进入了几天尝试升级的过程:

  • Poco 1.9.0,win32 构建,包括 NetSSL_OpenSSL 和 Data/MySQL,在 Windows 7 上,使用 MS Visual Studio 2015 自 2018 年 4 月以来通过 Windows 资源管理器中的 buildwin.cmd 脚本成功构建

到:

  • Poco 1.10.1、win32 和 x64 构建,包括 NetSSL_OpenSSL 和 Data/MySQL(32 位)或 Data/PostgreSQL(64 位),在 Windows 10 上,使用 MS Visual Studio 2019,通过任何方式构建.

到目前为止,我无法通过任何方式使构建过程在从旧构建到新目标的任何重要方向上让步……除非可能通过 CMake。

由于 CMake 似乎是构建 Poco 的首选方式,并且没有其他方法(例如 buildwin.cmd)按预期工作,我正在尝试重建 32 位 DLL,以便可以在我的应用程序中使用经过验证的旧组件进行测试。看起来很有希望。但是加密构建抱怨:

LINK : fatal error LNK1104: cannot open file 'libcrypto.lib' [S:\3rdparty\Poco-build32\Crypto\Crypto.vcxproj]

这很奇怪:在整个Crypto.vcxproj 文件中,根本没有提到 libcrypto.lib,只有 libcrypto32MD.lib 和 libcrypto32MDd.lib。为什么它还要寻找 libcrypto.lib?即便如此,如果它应该找到libcrypto.lib,为什么它在C:\Program Files (x86)\OpenSSL-Win32\libOPENSSL_ROOT_DIR 设置为C:\Program Files (x86)\OpenSSL-Win32 时没有成功?我错过了什么?我通过以下方式达到这一点:

cmake -HS:\3rdparty\Poco -B S:\3rdparty\Poco-build32 -G "Visual Studio 16 2019" -A win32
cmake --build s:\3rdparty\Poco-build32 --config RelWithDebInfo

更新:如果我在尝试以其他方式构建时修改了任何内容(buildwin.cmd,Visual Studio 中的批量构建),我将整个 Poco 文件结构放在一边,并解压缩一个新副本。 OpenSSL 安装也很新鲜,没有受到影响。 x64 版本产生相同的错误...

【问题讨论】:

标签: cmake poco-libraries


【解决方案1】:

有一个隐藏的自述文件https://github.com/pocoproject/poco/blob/master/README。我在引用:

通过 Poco/Crypto/Crypto.h 和 Poco/Net/NetSSL.h 头文件, Visual C++ 将自动链接 libcrypto.lib 和 libssl.lib 图书馆。如果您的 OpenSSL 库名称不同,请编译 定义宏 POCO_EXTERNAL_OPENSSL 并编辑项目 相应的文件。

您可以尝试使用相应设置的 POCO_EXTERNAL_OPENSSL 宏重新编译(请参阅Foundation/include/Poco/Config.h)。 (source)

或者我做了什么。编辑文件Crypto/include/Poco/Crypto/Crypto.h,删除所有关于编译指示的 if-else 逻辑,只保留使用 have 的库:

#pragma comment(lib, "libcrypto64md.lib")
#pragma comment(lib, "libssl64md.lib")

【讨论】:

    【解决方案2】:

    这不是一个直接的答案 - 它是一种替代构建路径,已被证实可以生成可行的 DLL。试试:

    • 从 Visual Studio 启动命令行工具
    • 调用 vcvars32.bat 或 vcvars64.bat 以确保环境对于 Win32 或 x64 构建是正确的。
      • 我在 C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build 中找到了这些脚本
    • 确保将 Poco buildwin.cmd 脚本配置为指定 OpenSSL 包含和 lib 子文件夹的位置
      • 如果同时构建 32 位和 64 位版本,您可能必须在构建之间修改脚本,因为 openSSL-Win32 和 openSSL-Win64 是单独安装的
      • 以相同方式指定其他组件的包含和库路径(例如 MySQL 和/或 PostgreSQL 等)
    • 编辑 Poco“组件”文件以消除任何不需要的组件,这些组件将停止构建
    • 调用 buildwin,例如:
      • buildwin 160 共享两个 Win32 示例注释
      • buildwin 160 共享两个 x64 示例注释

    【讨论】:

      猜你喜欢
      • 2013-04-25
      • 2011-09-25
      • 2017-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-27
      • 2010-09-09
      相关资源
      最近更新 更多