我有一个程序,我正在编写,这需要计算一些散列。我需要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):未定义的对‘MD4’collect2的引用: ld返回了1个退出状态
我简单地使用以下方法编译:
g++ myfile.cpp -o myapp.o在下
我从openssl下载了这里库,并使用./configure编译了cby,然后在下载的非目标目录中使用make install编译了cby。我还在/usr/local/include目录中复制了我下载的目录中的include目录,这样编译器就可以找到标题,因为/usr/local/include在include env中。
然而,问题是链接器找不到函数。据我所知,原因可能有两个:
openssl是用C编写的,而不是用C++编写的。我该怎么做?谢谢你
Edit1
我实际上改变了我的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):未定义的对‘MD4’collect2的引用: ld返回了1个退出状态
有点失望。你认为如何?
发布于 2012-10-13 14:23:34
针对openssl的链接通常需要-lssl。
g++ -o myapp myfile.cpp -lssl 顺便说一句,听起来你的安装可能有点不正确。
您不应该在任何地方复制头文件。而且您可能还没有复制共享库。
编译应该是这样的:
./configure --prefix=/usr/local/openssl
make
make install然后编译您的程序如下:
g++ -c -o myapp1.o myfile1.cpp -I/usr/local/openssl/include
g++ -c -o myapp2.o myfile2.cpp -I/usr/local/openssl/include
g++ -o myapp myapp1.o myapp2.o -I/usr/local/openssl/include -L/usr/local/openssl/lib -lssl -lcrypto发布于 2012-10-13 14:27:14
导致此错误的原因是您在编译期间没有将程序链接到openssl库。
用
g++ myfile.cpp -o myapp.o -lssl请参阅GCC的OpenSSL链接选项-lssl和-lcrypto
如何将程序链接到openssl。
https://stackoverflow.com/questions/12873967
复制相似问题