Ошибка при компиляции моего проекта CryptoPP с помощью mingw в Ubuntu

Я новичок в С++ и пытаюсь использовать библиотеку 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, я больше не нахожу библиотеку.

Вот мой main.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, как вы можете видеть на экране: IDE CLion сообщает мне, что нет файлов заголовков

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


person Laurent    schedule 22.02.2020    source источник
comment
Вы установили версии mingw библиотек cryptopp? Линуксовые не будут работать   -  person Alan Birtles    schedule 23.02.2020
comment
Привет @AlanBirtles, спасибо за ответ, не знал, что Linux не будет работать. Поэтому я следил за этой темой: library-on-linux-with-mingw И добавьте в мой CMakeList.txt: `find_library(CryptoPP/usr/lib/cryptopp/libcryptopp.a REQUIRED) set(CMAKE_CXX_COMPILER i686-w64-mingw32-g++) target_link_libraries (CryptoPP_Example_AES ${CryptoPP})' Это не работает. Что я делаю не так ? Как я могу установить версию mingw?   -  person Laurent    schedule 23.02.2020
comment
"/usr/lib/cryptopp/libcryptopp.a" где вы установили свою версию cryptopp для mingw?   -  person Alan Birtles    schedule 23.02.2020
comment
Да, но я ошибся, написав путь. При сборке и установке Cryptopp с x86_64-w64-mingw32-g++ я решил поместить установленные файлы в /usr/lib/cryptopp. Итак, в usr/lib/cryptopp/ у меня есть 3 каталога: - /bin (с cryptest.exe и libcryptopp.a) - /includes/cryptopp/ (со всеми файлами заголовков) - /share (с datatest) При записи пути Я сделал ошибку, но в моем коде все в порядке. Теперь у меня новая ошибка, я связал каталог include для файлов заголовков и моего libcryptopp.a и теперь получил новую ошибку: /usr/lib/x86_64-linux-gnu/libcryptopp.so: файл не распознан   -  person Laurent    schedule 23.02.2020
comment
Я действительно не говорю Cmake искать мой файл .so. Действительно не понимаю, почему связать что-то так сложно ^^   -  person Laurent    schedule 23.02.2020
comment
Извините за многочисленные комментарии, но теперь с этими строками: set(CMAKE_CXX_COMPILER i686-w64-mingw32-g++) target_include_directories(CryptoPP_Example_AES PUBLIC /usr/lib/cryptopp/include/) target_link_libraries(CryptoPP_Example_AES /usr/lib/cryptopp/libcryptopp.a) Кажется, mingw нашел все, что мне нужно, но теперь я получил много неопределенных ссылок в main.cpp.   -  person Laurent    schedule 23.02.2020