Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Systèmes de compilation Discussion :

Difficulté de compilation en mode static ( Cross plateform )


Sujet :

Systèmes de compilation

  1. #1
    Nouveau Candidat au Club
    Difficulté de compilation en mode static ( Cross plateform )
    Bonjour a tous,


    Je développe actuellement un utilitaire qui a comme objectif d'aller récupérer une information sur un serveur pour appliquer le traitement associé sur le poste ou il a été déposé.

    Pour être cross plateforme (PC : windows/mac, serveur : windows/mac/linux) je l'ai développé en C++.

    Pour des raisons de sécurité, les échanges sont en SSL avec du TLS 1.2.

    l'utilitaire fonctionne très bien et se compile sans erreurs sur les différents OS.

    Je voudrait que cet utilitaire soit autonome et ne dépende d'aucuns autres composants.

    C'est a ce stade que je bloque aujourd'hui :

    Je choisi de mettre l'option -static a la compilation pour qu'il embarque dans le programme les bibliothèques ssl.

    Au vue de la taille du programme, il semble qu'il l'embarque bien mais a l'execution, il recherche toujours les bibliothèques ssl.

    exemple windows dans WinGW :

    si je compile en dynamique , l'utilitaire fait 75Ko sur disque

    lorsque je l'execute, il me demande les bibliothèques libcrypto-1_1.dll et libssl-1_1.dll

    Si je le compile en static, il passe à 835 Ko.

    ET lorsque je l'execute, il me demande également les bibliothèques.

    voici la ligne que l'utilise pour la compilation.

    g++ -Os -static -t --verbose -g3 -pie -MMD -MP
    -I "C:\OpenSSL-Win32\include"
    ..\Cyb\ctx_ssl.cpp ..\Cyb\src\resources\resources.res
    -o ..\Cyb\ctx_ssl.exe
    -lws2_32 C:\OpenSSL-Win32\lib\MinGW\libcrypto-1_1.a C:\OpenSSL-Win32\lib\MinGW\libssl-1_1.a

    Si je pose les dll dans le dossier de l'exe, cela marche!

    exemple mac

    meme constat : il me demande /usr/local/lib/libssl.1.1.dylib et libcrypto.1.1.dylib

    ligne de compilation :

    gcc -I "../Cyb/openssl/include/" ./ctx_ssl.cpp -o ./ctx_ssl
    /Users/mac/Desktop/Cyb/openssl/libssl.a
    /Users/mac/Desktop/Cyb/openssl/libcrypto.a
    -L "../Cyb/openssl/" -lssl -lcrypto

    j'ai creusé la doc de G++ mais je n e trouve pas l'option qui permettrait de forcer.

    je peu vous fournir le source de base pour tester.

    Merci d'avance pour votre aide.

  2. #2
    Membre du Club
    Es-tu sûr que les libcrypto-1_1.a et libssl-1_1.a sont aussi compilées en static ? (tu ne l'as pas précisé dans ta question)

  3. #3
    Nouveau Candidat au Club
    Livrables OpenSSL
    Merci pour ton retour,

    j'utilise directement ces 2 fichiers livrés avec OpenSSL,

    ( 1 ) comment puis je savoir s'ils sont compilés en static?
    ( 2 ) faut-il que je recompile OpenSSL?

    sous windows ils sont livrés dans le dossier : lib\MinGW

  4. #4
    Membre du Club
    (1) Tel quel avec juste le fichier.a, je ne sais pas si on peut distinguer facilement une lib dynamique d'une statique (si on a les deux versions sous les yeux, la taille peut suffire comme tu l'as mentionné).

    (2) L'organisme en charge d'OpenSSL ne fourni que les sources, donc si tu as une librairie compilée sous la main c'est qu'elle provient d'un tiers.
    A titre indicatif, le wiki officiel indique certains fournisseurs pour les obtenir, avec parfois la mention static/dynamic: https://wiki.openssl.org/index.php/Binaries
    En revanche il ne semble pas mentionner de fournisseur pour une version macOs, il va falloir que tu cherches un peu plus sur le net ou que tu recompiles toi-même, en effet.

  5. #5
    Nouveau Candidat au Club
    Nouveau test OpenSSL static
    Bonjour,

    Suite a tes conseils,

    j'ai téléchargé eun version qui indique le mode static

    https://bintray.com/vszakats/generic/openssl

    j'ai adapté le script de compilation

    g++ -t --verbose -g0 -pie -MMD -MP -static -march=i586
    -I "C:\openssl-1.1.0h-win32-mingw\include"
    ..\CybConsole\ctx_ssl.cpp
    ..\CybConsole\src\resources\resources.res
    -o ..\CybConsole\ctx_ssl
    -L "C:\openssl-1.1.0h-win32-mingw\lib" -lws2_32 C:\openssl-1.1.0h-win32-mingw\lib\libssl.dll.a C:\openssl-1.1.0h-win32-mingw\lib\libcrypto.dll.a

    dans le log ont vois bien qu'il utilise biens les lib que je souhaite

    (C:\openssl-1.1.0h-win32-mingw\lib\libssl.dll.a)d000388.o
    (C:\openssl-1.1.0h-win32-mingw\lib\libssl.dll.a)d000387.o
    (C:\openssl-1.1.0h-win32-mingw\lib\libssl.dll.a)d000337.o
    (C:\openssl-1.1.0h-win32-mingw\lib\libssl.dll.a)d000310.o
    (C:\openssl-1.1.0h-win32-mingw\lib\libssl.dll.a)d000307.o
    (C:\openssl-1.1.0h-win32-mingw\lib\libssl.dll.a)d000229.o
    (C:\openssl-1.1.0h-win32-mingw\lib\libssl.dll.a)d000223.o
    (C:\openssl-1.1.0h-win32-mingw\lib\libssl.dll.a)d000218.o
    (C:\openssl-1.1.0h-win32-mingw\lib\libssl.dll.a)d000215.o
    (C:\openssl-1.1.0h-win32-mingw\lib\libssl.dll.a)d000150.o
    (C:\openssl-1.1.0h-win32-mingw\lib\libssl.dll.a)d000095.o
    (C:\openssl-1.1.0h-win32-mingw\lib\libssl.dll.a)d000070.o
    (C:\openssl-1.1.0h-win32-mingw\lib\libssl.dll.a)d000018.o
    (C:\openssl-1.1.0h-win32-mingw\lib\libssl.dll.a)d000000.o
    (C:\openssl-1.1.0h-win32-mingw\lib\libssl.dll.a)d000402.o
    (C:\openssl-1.1.0h-win32-mingw\lib\libcrypto.dll.a)d002196.o
    (C:\openssl-1.1.0h-win32-mingw\lib\libcrypto.dll.a)d000000.o
    (C:\openssl-1.1.0h-win32-mingw\lib\libcrypto.dll.a)d004039.o

    ca compile nickel

    mais j'ai toujours les dépendances ssl externes!

    Je ne suis pas le seul a développer en C++ avec SSL.

    C'est désespérant!

    Avez vous une idée?????

    Merci d'avance

    Pour Mac, je pense avoir trouvé ( configure -static a l'installation d'openssl) mais ma priorité est sur PC.

  6. #6
    Membre du Club
    Sous Windows, un fichier dll est la composante binaire d'une bibliothèque dynamique, donc d'instinct je linkerais plutôt libssl.a que libssl.dll.a pour cibler la version statique (pareil pour libcrypto évidemment).