【问题标题】:Why does openssl/ssl.h contain nothing but a relative path?为什么 openssl/ssl.h 只包含相对路径?
【发布时间】:2013-12-31 06:31:14
【问题描述】:

我通过执行以下操作使用 MSVC++ 2013 Express 编译器构建了 OpenSSL:

  • here 安装 ActivePerl 5.16.3。
  • 抓取openssl-1.0.1e.tar.gz 并将其提取到C:\OpenSSL\Win64
  • 打开“VS2013 x64 Cross Tools 命令提示符”和cd-ing 到我解压存档的目录。
  • 运行以下命令:

    perl 配置VC-WIN64A
    毫秒\do_win64a
    nmake -f ms\ntdll.mak

这已完成且没有错误(已构建正确的 DLL)。然而,发生了一件非常奇怪的事情。如果我打开openssl/ssl.h,文件的内容是:

../../ssl/ssl.h

由于这显然不是有效的 C/C++,由于上述问题,我无法编译任何依赖于 OpenSSL 标头的应用程序。我做错了什么?

【问题讨论】:

  • 推测:该文件几乎肯定应该是一个符号链接 - 要么它已从存档中不正确地提取,要么构建脚本以某种方式将其创建为常规文件而不是链接。
  • @duskwuff:那些文件好像是这样打包的。看看链接的档案...... - 所以我会去你这个应该是链接的建议。
  • 你用什么工具来解压存档?
  • @duskwuff:我正在使用 7-Zip。

标签: c openssl visual-studio-2013


【解决方案1】:

duskwuffcomment 确实是正确的。问题是 7-Zip 没有正确提取存档中的符号链接。解决方案是下载GnuWin32's tar command line utility 并使用它来提取存档:

tar -xvf openssl-1.0.1e.tar.gz

【讨论】:

    【解决方案2】:

    这不仅仅是openssl/ssl.h的情况。我看到的几乎所有文件都是这种情况。

    我猜想在构建 OpenSSL 时使用此信息将包含文件生成到您在 makefile 中提到的包含文件夹中(对于 Windows,它是 nt.mak 或 ntdll.mak)。

    如果您生成或构建库,您将在日志中看到头文件被复制到 makefile 中提到的文件夹中,并且您会在那里找到看起来像有效 C 头文件的头文件。你实际上使用的是那些生成的头文件,而不是这个头文件。

    它看起来像一个用于生成头文件的模板。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-08
      • 2013-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-30
      • 1970-01-01
      相关资源
      最近更新 更多