【问题标题】:'SHA1' is deprecated: first deprecated in OS X 10.7?'SHA1' 已弃用:首先在 OS X 10.7 中弃用?
【发布时间】:2013-11-19 08:25:30
【问题描述】:

所以我试图编译一个具有SHA1 函数的代码.. 我包含以下标题:

#include <openssl/sha.h>

我在编译时遇到以下错误:

test.c:9:5: error: 'SHA1' is deprecated: first deprecated in OS X 10.7
  [-Werror,-Wdeprecated-declarations]
SHA1(msg, strlen(msg), hs);
^

但手册页仍然有该功能的描述。

任何人都可以为类似功能(MD5 或 SHA1)建议任何其他标头吗?

PS - 我还需要在使用 gcc 编译时链接任何库吗?

【问题讨论】:

  • 您仍然可以使用它。已弃用并不意味着不可用。建议使用不同的散列算法。您需要链接到 libcrypto - 将 -lcrypto 添加到要链接到的库中。

标签: c macos gcc openssl osx-mavericks


【解决方案1】:

您仍然可以使用它。已弃用并不意味着不可用。建议使用不同的散列算法。您需要链接到 libcrypto - 将 -lcrypto 添加到要链接到的库中。

如果您使用更多的 openssl,您还需要在 libssl 中链接,使用 -lssl。

所以,例如,如果你的测试代码是 test.c,你会这样做:

gcc -o test test.c -lcrypto -lssl

【讨论】:

  • 那么我的 gcc 命令会是什么样子?我需要链接 lssl 和 lcrypto 吗?
  • 只有在使用 openssl 特定功能时才需要链接两者。如果您正在开发仅适用于 mac 的应用程序,那么我建议您使用 Common Crypto,但如果您只是制作一些示例代码,那么可以继续使用 openssl。
【解决方案2】:

Apple 已弃用 OpenSSL,但不用担心,OpenSSL 是一个庞大的项目,不会很快消失。

您可以通过在命令行中添加 -Wno-error=deprecated-declarations 来关闭已弃用的错误。这将保留警告(这很有用,因为它可以帮助您捕获其他已弃用的声明)而不会导致它出错。

关于为什么会在这篇文章中发生这种情况存在一些争论:Why is Apple Deprecating OpenSSL in MacOS 10.7 (Lion)?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多