【问题标题】:Undefined reference to `SHA1'对“SHA1”的未定义引用
【发布时间】:2015-04-29 10:51:17
【问题描述】:

由于 Code::Blocks 的问题,我在这里发帖

我最近在 linux 中创建了一个可以正确编译和执行的项目。 现在我正在尝试让它在 Windows 上运行。

问题

感谢 Code::Blocks 在我尝试编译时收到错误消息: C:\Users\PC\Desktop\Collector\verification.c |44|未定义对`SHA1'的引用|

这是我的配置:

  • 右键单击我的项目
  • 然后是“构建选项”

在“链接器设置”中,我有: -lws2_32 进入“其他链接器选项”。

在“搜索目录”选项卡中:

在“编译器”中:

..\..\..\..\OpenSSL-Win64\include

对应于我的 Open SSL 安装的包含文件

在链接器中:..\..\..\..\OpenSSL-Win64\lib

对应Open SSL的lib

这里是出现编译问题的 C 代码的摘录:

    bool checkVol(Index* index, unsigned char* vol, int id_vol) {
        char outsha[40] = { 0 };
        unsigned char outbuf[SHA_DIGEST_LENGTH];

        SHA1(vol, sizeof(vol), outbuf);

        hexToString(outbuf, outsha);

        printf("%s\n", outsha);
        printf("%s\n", index->sha[id_vol]);

        if ( strcmp(outsha, index->sha[id_vol]) == 0 ) {
            printf("Volume %i is the same.\n", id_vol);
            return TRUE;
        }

        return FALSE;
    }

我不知道接下来我应该怎么做才能让我的程序在 Windows 上运行... 有人知道好的配置吗?

感谢您的帮助。

PS : 对不起,我的英语可能很糟糕:x

【问题讨论】:

  • 您还需要一个-lcrypto 来链接到SHA1 函数。
  • 感谢您的回复 我已经尝试过您的解决方案,但出现错误:“ld.exe||找不到 -lcrypto|”
  • 那么 lib 文件的搜索路径不正确,因为那是包含 SHA1 例程的 OpenSSL 库的名称。
  • 然后我不知道该尝试什么...我找不到解决此问题的方法。我试图编辑所有设置,但没有任何效果。搜索后,我的“OpenSSL-Win64”目录中没有“libcrypto.*”:/
  • 解决方案应该作为答案发布,而不是编辑到您的问题中。 (是的,您可以发布自己问题的答案。)

标签: c windows openssl codeblocks sha1


【解决方案1】:

我终于自己解决了这个问题。

修复:

首先我删除了 x64 版本 然后从this link安装“Win32 OpenSSL v1.0.1L”

然后使用以下配置更新我的构建选项:

在“链接器设置”中,我添加了:来自

的 2 '.a'
"C:\OpenSSL-Win32\lib\MinGW\"

通过输入更新“搜索目录”:

"C:\OpenSSL-Win32\include"

在“编译器”选项卡中。

希望这对其他人有所帮助! :D

【讨论】:

    猜你喜欢
    • 2019-04-12
    • 1970-01-01
    • 2019-07-30
    • 1970-01-01
    • 2011-03-27
    • 2022-01-22
    • 2016-04-04
    • 2015-11-03
    相关资源
    最近更新 更多