gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:12:01 24 4
gpt4 key购买 nike

我正在编写一个程序,它需要计算一些哈希值。我需要 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 下。

我从 here 下载了 openssl 库并使用 ./configure 编译它们,然后在下载的 untarpalled 目录中使用 make install。我还在 /usr/local/include 目录中复制了我下载的目录中的 include 目录,以便编译器可以找到 header ,因为 /usr/local/include 在我的 $PATH 环境变量中。

但是问题是链接器找不到该函数。我知道原因可能有两个:

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

我应该如何进行?谢谢

编辑1

我实际上更改了我的openssl 安装

我再次安装了 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

在我之前提到的目录中,我可以分别找到包含所有 header 的 /usr/local/ssl/include/openssl 目录和 /usr/local/ssl/lib/libssl.a/usr/local/ssl/lib/libcrypto.a 库。

在我使用旧的编译命令进行此更改之前,编译器告诉我:找不到 -lssl。通过这些更改,现在它可以找到库和 header ,但是 ld 总是以同样的方式失败:

myfile.cpp:(.text+0x3e): undefined reference to `MD4' collect2: ld returned 1 exit status

有点失望。你怎么看?

最佳答案

针对 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

关于C++ 链接器在查找 openssl MD4 函数时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12873967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com