链接错误:对EVP_CIPHER_CTX_和EVP_CIPHER_CTX_init的未定义引用

时间:2011-09-07 13:47:09

标签: c++ ubuntu openssl

我在我的代码中使用了crypto ++。我不想使用它的依赖项,所以我试图在我的文件夹中导入crypto ++文件并将它们包含在我的.cpp文件中

我有以下错误:

TEST.cpp:(.text+0x89a0): undefined reference to `EVP_CIPHER_CTX_init'
TEST.cpp:(.text+0x8cb0): undefined reference to `EVP_aes_128_cbc'
TEST.cpp:(.text+0x8cdd): undefined reference to `EVP_CipherInit_ex'
TEST.cpp:(.text+0x8d49): undefined reference to `EVP_CipherUpdate'
TEST.cpp:(.text+0x8dd6): undefined reference to `EVP_CipherFinal_ex'
TEST.cpp:(.text+0x922d): undefined reference to `EVP_CIPHER_CTX_cleanup'
我错过了什么?需要一些帮助。欣赏! 我在ubuntu工作。

2 个答案:

答案 0 :(得分:6)

你需要做两件事,到目前为止你只做过一件事。

您需要告诉编译器在哪里找到适当的声明。你已经通过添加

完成了这项工作
#include "evp.h"

在您的源文件中。 (根据您安装crypto ++的方式,您可能还需要告诉编译器在哪里找"evp.h",可能使用-Isome_directory。)

您缺少的步骤是告诉链接器在哪里可以找到您正在使用的函数的实际实现(已编译的代码)。根据发行版中包含的Readme.txt文件,bulding crypto ++会创建一个名为libcryptopp.a的库文件。

所以这样的事情应该可以胜任:

gcc my_program.c -o my_program -lcryptopp

根据您安装它的方式和位置,您可能还需要指定-Lsome_directory以告知链接器在哪里找到libcryptopp.a。 (gcc命令调用编译器和链接器。-l选项告诉链接器使用libcryptopp.a-L选项,如果需要,告诉它到哪个目录看看。)

答案 1 :(得分:2)

TEST.cpp:(.text+0x89a0): undefined reference to `EVP_CIPHER_CTX_init'
TEST.cpp:(.text+0x8cb0): undefined reference to `EVP_aes_128_cbc'
TEST.cpp:(.text+0x8cdd): undefined reference to `EVP_CipherInit_ex'
TEST.cpp:(.text+0x8d49): undefined reference to `EVP_CipherUpdate'
TEST.cpp:(.text+0x8dd6): undefined reference to `EVP_CipherFinal_ex'
TEST.cpp:(.text+0x922d): undefined reference to `EVP_CIPHER_CTX_cleanup'

那不是Crypto ++ - 它的OpenSSL。


如果你需要在Ubuntu上安装Crypto ++,那么:

root@bruno:/# apt-cache pkgnames | grep -i crypto++
libcrypto++-utils
libcrypto++8
libcrypto++8-dbg
libcrypto++-dev
libcrypto++-doc

root@bruno:/# apt-get install libcrypto++8 libcrypto++8-dbg libcrypto++-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  libcrypto++-dev libcrypto++8 libcrypto++8-dbg
0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 10.7MB of archives.
...