我有一个正在编写的程序,需要计算一些哈希值。我需要 SHA、MD、HMAC 算法。这就是我选择openssl
作为解决方案的原因。
我的代码如下:
#include <openssl/md4.h>
void calc();
void calc(unsigned char* data, unsigned long len) {
unsigned char* h = new unsigned char[128];
MD4(data, len, h);
}
编译器返回给我以下信息:
myfile.cpp:(.text+0x3e): undefined reference to `MD4' collect2: ld returned 1 exit status
我简单地编译使用:
g++ myfile.cpp -o myapp.o
在 Linux Fedora 下。
我从这里openssl
下载了库,并使用然后在下载的解压缩目录中编译了它们。我还在目录中复制了我下载的目录,以便编译器可以找到头文件,因为它在我的环境变量中。./configure
make install
/usr/local/include
include
/usr/local/include
$PATH
但是问题是链接器找不到该函数。我知道原因可能有两个:
- 编译器可以找到头文件但找不到实现。
- 有问题是因为
openssl
写在C
not in 中C++
。
我应该如何进行?谢谢
编辑1
我实际上改变了我的openssl installation
.
我openssl
再次安装,我可以看到它将所有内容放在/usr/local/ssl
我可以找到的目录/usr/local/ssl/include
和/usr/local/ssl/lib
目录下。我将编译字符串更改为:
g++ -I/usr/local/ssl/include -L/usr/local/ssl/lib -lssl -lcrypto
在我之前提到的目录中,我可以分别找到/usr/local/ssl/include/openssl
包含所有标题的目录/usr/local/ssl/lib/libssl.a
和/usr/local/ssl/lib/libcrypto.a
库。
在我使用旧的编译命令进行此更改之前,编译器告诉我:Cannot find -lssl
. 通过这些更改,现在它可以找到库和头文件,但ld
总是以同样的方式失败:
myfile.cpp:(.text+0x3e): undefined reference to `MD4' collect2: ld returned 1 exit status
有点失望。你怎么看?