2017-06-22 1 views
0

J'ai un projet réalisé en C++ et j'ai besoin de le compiler pour Windows XP et plus tard.Impossible de lier le projet C++ avec les bibliothèques statiques openssl

Ceci est le fichier d'en-tête de ma classe RsaEncryptor (je pense qu'il est indifférent de publier des sources ici, parce que je suis sûr à 100% que ça fonctionne bien, mais si nécessaire):

#ifndef RSAENCRYPTOR_H_ 
#define RSAENCRYPTOR_H_ 

#include <stdexcept> 
#include <openssl/rsa.h> 
#include <openssl/engine.h> 
#include <openssl/pem.h> 

// One of this paddings can be used 
//#define PADDING RSA_PKCS1_OAEP_PADDING 
#define PADDING RSA_PKCS1_PADDING 
//#define PADDING RSA_NO_PADDING 

class RsaEncryptor { 

private: 

    RSA* publicKey; 
    RSA* privateKey; 

public: 

    RsaEncryptor() { 
     publicKey = nullptr; 
     privateKey = nullptr; 
    } 

    ~RsaEncryptor() { 
     if (this->publicKey) 
      RSA_free(this->publicKey); 
     if (this->privateKey) 
      RSA_free(this->privateKey); 
    } 

    size_t GetCipherBytesCount() { 
     return 172; //is default for 1024 bit key length 
    } 

    void SetPublicKeyFromString(const std::string& content); 
    void SetPrivateKeyFromString(const std::string& content); 

    std::string Encrypt(const std::string& plainData); 
    std::string Decrypt(const std::string& cipherData); 

}; 


#endif /* RSAENCRYPTOR_H_ */ 

J'utilise toute dernière version de Eclipse Neon pour le développement de C sur la machine Windows 10 x64.

Aussi j'ai lu this:

(...) you will need to configure with no-async when building OpenSSL 1.1.0 and above for Windows XP or Vista

Et je suis guidé par following instructions.

Qu'est-ce que je fais:

  1. installer Ubuntu 17.04 x64 dans Virtual Box sous Windows 10 x64.

  2. télécharger la dernière version de la bibliothèque OpenSSL Ubuntu

  3. installer mxe et toutes les exigences (mais ne peut pas compiler avec elle et je décide d'utiliser mingw32)

  4. installer mingw32 via [email protected]:/home/user# apt-get install gcc-mingw-w64-i686

  5. décompresser la bibliothèque OpenSSL dans /home/user/openssl-x32

  6. aller à /home/user/openssl-x32

  7. run ./Configure mingw --cross-compile-prefix=i686-w64-mingw32 --prefix=/home/user/builds/openssl-x32-static no-shared no-async

  8. run make

  9. run make install

  10. copie libssl.a et libcrypto.a de /home/user/builds/openssl-x32-static/lib à la machine hôte (Windows 10 x64) to folder E:\MyProjects\my-app\libraries\

  11. copie include répertoire de Ubuntu pour accueillir la machine dans le dossier E:\MyProjects\my-app\include

  12. Ajouter libraries dossier aux configurations de l'éditeur de liens

  13. Ajouter include dossier compilateur configurations

  14. Ensuite, je construis mon projet mais j'ai la suite answer:

11:58:09 **** Rebuild of configuration Debug for project app **** Info: Configuration "Debug" uses tool-chain "MinGW GCC" that is unsupported on this system, attempting to build anyway. Info: Internal Builder is used for build g++ "-IC:\MyProjects\my-app\include" -O0 -g3 -Wall -c -std=c++11 -m32 -o RsaEncryptor.o "..\RsaEncryptor.cpp" g++ "-IC:\MyProjects\my-app\include" -O0 -g3 -Wall -c -std=c++11 -m32 -o main.o "..\main.cpp" In file included from ..\main.cpp:5:0: ..\FilesFinder.h: In member function 'void FilesFinder::FindRecursively(const string&, const FilesFilter&)': ..\FilesFinder.h:90:56: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] while (destinationContainer.GetElementsCount() >= MAX_ELEMENTS_COUNT) { ^g++ "-IC:\MyProjects\my-app\include" -O0 -g3 -Wall -c -std=c++11 -m32 -o aes256.o "..\aes256.cpp" g++ "-LC:\MyProjects\my-app\libraries" -static-libgcc -static-libstdc++ -static -lpthread -m32 -o C:/MyProjects/my-app/bin/Debug/app RsaEncryptor.o aes256.o main.o -lssl -lcrypto -lgdi32 C:\MyProjects\my-app\libraries\libcrypto.a(b_addr.o):b_addr.c:(.text+0xaa): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_addr.o):b_addr.c:(.text+0xe0): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_addr.o):b_addr.c:(.text+0x242): undefined reference to gai_strerrorW' C:\MyProjects\my-app\libraries\libcrypto.a(b_addr.o):b_addr.c:(.text+0x820): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_addr.o):b_addr.c:(.text+0xb5d): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_addr.o):b_addr.c:(.text+0xba2): undefined reference to gai_strerrorW' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0xd7): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0xe8): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x2c7): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x2d8): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x3b1): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x40c): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x423): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x43c): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x48b): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x4a2): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x52c): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x54d): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x563): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x6b7): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x6c8): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x942): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x9dc): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0xa15): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0xa32): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0xaa6): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0xb22): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x27): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x4e): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x120): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x15b): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x1f5): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x206): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x265): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x2c6): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x377): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x38f): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x4a7): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x4b4): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x53a): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x55f): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x5a5): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x5b6): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x63a): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x64b): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x6b2): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x713): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x7a6): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x7e7): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x84b): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x86c): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x1b1): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x1d0): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x20a): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x272): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x299): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x2ca): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x33d): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x360): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x39a): undefined reference to [email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x457): undefined reference to [email protected]' c:/programs/mingw_w64_mingw32_gcc_stdthread_win32/bin/../lib/gcc/i686-w64-mingw32/4.8.1/../../../../i686-w64-mingw32/bin/ld.exe: C:\MyProjects\my-app\libraries\libcrypto.a(bss_sock.o): bad reloc address 0x24 in section .rdata' c:/programs/mingw_w64_mingw32_gcc_stdthread_win32/bin/../lib/gcc/i686-w64-mingw32/4.8.1/../../../../i686-w64-mingw32/bin/ld.exe: final link failed: Invalid operation collect2.exe: error: ld returned 1 exit status

11:58:21 Build Finished (took 11s.567ms)

J'ai juste besoin de lier mon projet C++ terminé avec la bibliothèque OpenSSL correctement compilée (avec le flag no-async) pour le laisser fonctionner sous les anciennes versions de Windows.

Je serai heureux de recevoir de l'aide pour ce problème.

+0

Vous avez étiqueté C * et * C++. ce sont des langues différentes. Vous devriez seulement marquer la langue pour laquelle vous avez besoin de réponses. En passant par votre question, je suppose que vous voulez des réponses C++ alors j'ai supprimé la balise C pour vous cette fois. – Toby

Répondre

1

La plupart sinon la totalité des symboles non définis dans votre journal des erreurs proviennent de Winsock. Essayez de créer un lien avec -lws2_32.

+0

Oui, vous aviez raison: je le lier avec les drapeaux '-lssl -lcrypto -lcrypt32 -lgdi32 -lws2_32' et il a été lié avec succès! Mais je teste à nouveau mon application (sous Windows XP), et ça ne marche toujours pas ... :( –