Ошибка ссылки: неопределенная ссылка на EVP_CIPHER_CTX_ и EVP_CIPHER_CTX_init - PullRequest
4 голосов
/ 07 сентября 2011

Я использую 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 ]

6 голосов
/ 07 сентября 2011

Вам нужно сделать две вещи, из которых вы сделали только одну.

Вы должны указать своему компилятору, где найти соответствующие объявления. Вы сделали это, добавив

#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, если необходимо, сообщает ему, в какой каталог искать.)

2 голосов
/ 29 июля 2013
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.


Если вам нужно установить Crypto ++ в Ubuntu, то:

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.
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...