首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++链接器在查找openssl MD4函数时遇到问题

C++链接器在查找openssl MD4函数时遇到问题
EN

Stack Overflow用户
提问于 2012-10-13 14:18:31
回答 2查看 1.1K关注 0票数 1

我有一个程序,我正在编写,这需要计算一些散列。我需要SHA,MD,HMAC算法。这就是我选择openssl作为解决方案的原因。

我的代码如下:

代码语言:javascript
复制
#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个退出状态

我简单地使用以下方法编译:

代码语言:javascript
复制
g++ myfile.cpp -o myapp.o

在下

我从openssl下载了这里库,并使用./configure编译了cby,然后在下载的非目标目录中使用make install编译了cby。我还在/usr/local/include目录中复制了我下载的目录中的include目录,这样编译器就可以找到标题,因为/usr/local/includeinclude env中。

然而,问题是链接器找不到函数。据我所知,原因可能有两个:

  • 编译器可以找到头,但找不到实现。
  • 存在问题,因为openssl是用C编写的,而不是用C++编写的。

我该怎么做?谢谢你

Edit1

我实际上改变了我的openssl installation中的一些东西。

我再次安装了openssl,我可以看到它将所有东西放在/usr/local/ssl下,在那里我可以找到/usr/local/ssl/include/usr/local/ssl/lib目录。我将编译字符串更改为:

代码语言:javascript
复制
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个退出状态

有点失望。你认为如何?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-13 14:23:34

针对openssl的链接通常需要-lssl

代码语言:javascript
复制
g++ -o myapp myfile.cpp -lssl 

顺便说一句,听起来你的安装可能有点不正确。

您不应该在任何地方复制头文件。而且您可能还没有复制共享库。

编译应该是这样的:

代码语言:javascript
复制
./configure --prefix=/usr/local/openssl
make
make install

然后编译您的程序如下:

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2012-10-13 14:27:14

导致此错误的原因是您在编译期间没有将程序链接到openssl库。

代码语言:javascript
复制
g++ myfile.cpp -o myapp.o -lssl

请参阅GCC的OpenSSL链接选项-lssl和-lcrypto

如何将程序链接到openssl。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12873967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档