河豚和对“BF_set_key”的未定义引用

Blowfish and undefined reference to `BF_set_key'

提问人:terenaa 提问时间:5/10/2012 最后编辑:jwwterenaa 更新时间:5/9/2015 访问量:3446

问:

我已经从此页面安装了 Win64 OpenSSL v1.0.1b 和 Visual C++ 2008 Redistributable,http://slproweb.com/products/Win32OpenSSL.html 并将编译器 () 和链接器路径 (, , ) 添加到 Code::Blocks,但我仍然无法编译我的程序。C:\OpenSSL-Win64\includeC:\OpenSSL-Win64\binC:\OpenSSL-Win64\libC:\OpenSSL-Win64

源代码:

#include <cstring>
#include <openssl/blowfish.h>

int main() {
    const char * key = "aaabbbcccdddeeefffggghh";
    BF_KEY bfKey;

    BF_set_key(&bfKey, strlen(key), (const unsigned char *) key);

    return 0;
}

错误:

obj\Release\main.o:main.cpp|| undefined reference to `BF_set_key'|

我试图添加 , , , , , 但它不起作用。然后我可以看到另一个错误:-lssl-lopenssl-llibssl-lcrypto

ld.exe||cannot find -lssl|

我不知道(谷歌也不知道)该怎么做。知道我做错了什么吗?

C++ OpenSSL Codeblocks 未定义引用 河豚

评论


答:

0赞 Alin Tomescu 5/10/2012 #1

我不确定您是否正确配置了它。似乎您还必须在设置库目录之上,在“构建选项”中的某个位置添加项目正在使用的库。这有帮助吗?http://www.learncpp.com/cpp-tutorial/a3-using-libraries-with-codeblocks/

评论

0赞 terenaa 5/10/2012
我看到了这个页面,我尝试了这个解决方案,现在我尝试从lib/添加所有(我不确定哪个负责我需要的东西)库,如步骤5所示,但它仍然不起作用。
0赞 Luis G. Costantini R. 5/10/2012 #2

由于您将 GCC 编译器 (MinGW) 与 Code::Blocks 一起使用,因此您必须将库 sear 目录 (C:\OpenSSL-Win64\lib) 更改为 C:\OpenSSL-Win64\lib\MinGW,并且要链接具有 Blowfish 函数的库,您必须使用 -leay32(在您的情况下可能是 -leay64)。

在目录 C:\OpenSSL-Win64\lib\MinGW 中,有 2 个带有 .def 扩展蛋白的文件,其中包含每个库导出的函数列表(libeay32.a/libeay64.a 和 ssleay32.a/ssleay64.a),顺便说一下,如果使用 -l 选项,则该文件必须称为 lib.a;如果要使用库 ssleay32.a/ssleay64.a 上的任何函数,则必须直接链接文件(例如 C:\OpenSSL-Win64\lib\MinGW\ssleay32.a)或将 lib 附加到文件的名称。

评论

0赞 terenaa 5/10/2012
有一个问题。我在 lib/ 中没有 MinGW/ - 只有 VC/ 此外,当我尝试添加 -leay64 Code::Blocks 时显示“找不到 -leay64”,而对于 -leay32 “C:\OpenSSL-Win64\bin/libeay32.dll:文件无法识别:文件格式无法识别”。在 lib/ 中,我只看到 *.lib 文件,没有 *.a 文件。