Ошибка компиляции моего проекта CryptoPP с mingw в Ubuntu - PullRequest
0 голосов
/ 23 февраля 2020

Я новичок в c ++ и пытаюсь использовать библиотеку CryptoPP для шифрования AES. Я использую Cmake и импортирую библиотеку, используя следующие строки:

cmake_minimum_required(VERSION 3.15)
project(CryptoPP_Example_AES)
set(CMAKE_CXX_STANDARD 20)
add_executable(CryptoPP_Example_AES main.cpp)
find_library(CryptoPP libcryptopp.a REQUIRED)
target_link_libraries(CryptoPP_Example_AES ${CryptoPP})

Для информации я установил libcrypto ++ 6 libcrypto ++ - dev libcrypto ++ dbg.

Как это все работает нормально и мой проект скомпилирован.

Проблема заключается в том, что когда я пытаюсь скомпилировать его, используя set(CMAKE_CXX_COMPILER i686-w64-mingw32-g++) MinGW, я больше не нахожу библиотеку.

Вот мой основной. cpp:

#include <iostream>
#include "cryptopp/modes.h"
#include "cryptopp/aes.h"
#include "cryptopp/filters.h"

int main(int argc, char* argv[]) {

    byte key[ CryptoPP::AES::DEFAULT_KEYLENGTH ], iv[ CryptoPP::AES::BLOCKSIZE ];
    memset( key, 0x00, CryptoPP::AES::DEFAULT_KEYLENGTH );
    memset( iv, 0x00, CryptoPP::AES::BLOCKSIZE );

    //
    // String and Sink setup
    //
    std::string plaintext = "Now is the time for all good men to come to the aide...";
    std::string ciphertext;
    std::string decryptedtext;

    //
    // Dump Plain Text
    //
    std::cout << "Plain Text (" << plaintext.size() << " bytes)" << std::endl;
    std::cout << plaintext;
    std::cout << std::endl << std::endl;

    //
    // Create Cipher Text
    //
    CryptoPP::AES::Encryption aesEncryption(key, CryptoPP::AES::DEFAULT_KEYLENGTH);
    CryptoPP::CBC_Mode_ExternalCipher::Encryption cbcEncryption( aesEncryption, iv );

    CryptoPP::StreamTransformationFilter stfEncryptor(cbcEncryption, new CryptoPP::StringSink( ciphertext ) );
    stfEncryptor.Put( reinterpret_cast<const unsigned char*>( plaintext.c_str() ), plaintext.length() + 1 );
    stfEncryptor.MessageEnd();

    //
    // Dump Cipher Text
    //
    std::cout << "Cipher Text (" << ciphertext.size() << " bytes)" << std::endl;

    for(char i : ciphertext) {

        std::cout << "0x" << std::hex << (0xFF & static_cast<byte >(i)) << " ";
    }

    std::cout << std::endl << std::endl;

    //
    // Decrypt
    //
    CryptoPP::AES::Decryption aesDecryption(key, CryptoPP::AES::DEFAULT_KEYLENGTH);
    CryptoPP::CBC_Mode_ExternalCipher::Decryption cbcDecryption( aesDecryption, iv );

    CryptoPP::StreamTransformationFilter stfDecryptor(cbcDecryption, new CryptoPP::StringSink( decryptedtext ) );
    stfDecryptor.Put( reinterpret_cast<const unsigned char*>( ciphertext.c_str() ), ciphertext.size() );
    stfDecryptor.MessageEnd();

    //
    // Dump Decrypted Text
    //
    std::cout << "Decrypted Text: " << std::endl;
    std::cout << decryptedtext;
    std::cout << std::endl << std::endl;

    return 0;
}

Итак, когда я использую set(CMAKE_CXX_COMPILER i686-w64-mingw32-g++), моя IDE сообщает, что нет файлов заголовков cryptopp, как вы можете видеть на экране: CLion IDE говорит, что нет файлов заголовков

Может ли кто-нибудь помочь мне в этом? Я долго искал в Интернете, но не нашел решения.

...