6

私はopensslの簡単なプログラムを構築しようとしています。完全なコードは次のとおりです。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "openssl/aes.h"

int main(int argc, char* argv[])
{
    AES_KEY aesKey_;
    unsigned char userKey_[16];
    unsigned char in_[16];
    unsigned char out_[16];
    strcpy(userKey_,"0123456789123456");
    strcpy(in_,"0123456789123456");

    fprintf(stdout,"Original message: %s", in_);
    AES_set_encrypt_key(userKey_, 128, &aesKey_);
    AES_encrypt(in_, out_, &aesKey_);

    AES_set_decrypt_key(userKey_, 128, &aesKey_);
    AES_decrypt(out_, in_,&aesKey_);
    fprintf(stdout,"Recovered Original message: %s", in_);      
    return 0;
}

私はこのコマンドを使用してそれをコンパイルしようとします:

gcc -I/home/aleksei/openSSL0.9.8/include -o app -L . -lssl -lcrypto tema1.c

そして私はこれを手に入れます:

 /tmp/ccT1XMid.o: In function `main':
 tema1.c:(.text+0x8d): undefined reference to `AES_set_encrypt_key'
 tema1.c:(.text+0xa7): undefined reference to `AES_encrypt'
 tema1.c:(.text+0xbf): undefined reference to `AES_set_decrypt_key'
 tema1.c:(.text+0xd9): undefined reference to `AES_decrypt'
 collect2: ld returned 1 exit status

私はUbuntu10.04を使用しています。どうすればこれを機能させることができますか?

4

3 に答える 3

8

静的にリンクしようとしている可能性がありますが、-Lオプションであり-lcrypto、動的にリンクするファイルを探しています。特定のライブラリに静的にリンクするには、.aすべてのソースファイルの後にコンパイラコマンドラインでファイルを指定するだけです。

例えば、

gcc -I/home/aleksei/openSSL0.9.8/include -o app tema1.c ./libcrypto.a
于 2012-06-12T22:09:52.097 に答える
3

これと同じ問題が発生しているが、Windows、Mingw、およびこのOpenSSL for Windows(現時点ではWin32 OpenSSL v1.0.2a)を使用している方。(OpenSSLのインストール後)libeay32.aにあるにリンクする必要があります。C:\OpenSSL-Win32\lib\MinGW\

私の場合、CMakeと強力なCLion IDElibeay32.dll.aを使用しているので、CMakeがライブラリを見つけられなかったため、ライブラリの名前をに変更する必要がありました。これは私のCMakeLists.txtです:

cmake_minimum_required(VERSION 3.1)
project(openssl_1_0_2a)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

include_directories(C:\\OpenSSL-Win32\\include)

set(SOURCE_FILES main.cpp)

link_directories(C:\\OpenSSL-Win32\\lib\\MinGW)

add_executable(openssl_1_0_2a ${SOURCE_FILES})

target_link_libraries(openssl_1_0_2a eay32)

私はこの例(この回答から借りたもの)でテストを行いました:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "openssl/aes.h"

int main(int argc, char* argv[])
{
    AES_KEY aesKey_;
    unsigned char userKey_[16];
    unsigned char in_[16] = {0};
    unsigned char out_[16] = {0};
    strcpy((char *) userKey_,"0123456789123456");
    strcpy((char *) in_,"0123456789123456");

    fprintf(stdout,"Original message: %s\n", in_);
    AES_set_encrypt_key(userKey_, 128, &aesKey_);
    AES_encrypt(in_, out_, &aesKey_);

    AES_set_decrypt_key(userKey_, 128, &aesKey_);
    AES_decrypt(out_, in_,&aesKey_);
    fprintf(stdout,"Recovered Original message: %s XXX \n", in_);
    return 0;
}
于 2015-05-15T19:32:00.227 に答える
0

パラメータの順序は次のようにリセットする必要があると思います。

gcc -I/home/aleksei/openSSL0.9.8/include -o app  tema1.c -L . -lssl -lcrypto
于 2022-02-26T10:00:41.270 に答える