IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Par défaut Pourquoi deux versions d'un même bibliothèque ne peuvent pas être utilisées simultanément dans un même program
    Bonjour tout le monde,

    J'ai toujours "accepté" cette idée sans jamais vraiment me demander pourquoi c'était comme ça, mais ... voilà !

    En y réfléchissant, et parce que je ne connais pas plus que ça cette couche bas-niveau où la résolution des noms des fonctions entre en jeu (j'imagine), je n'arrive pas à comprendre pourquoi deux versions d'une même bibliothèque ne pourraient pas coexister.

    S'agit-il d'une impossibilité technique, ou d'un choix pratique pour simplifier justement cette étape de résolution des "symboles" ?

    Pour prendre un exemple, admettons que je travaille avec une version de Qt construite avec OpenSSL 1.0, et que je veuille utiliser une bibliothèque tierce dans mon programme, elle dépendante d'OpenSSL 1.1. Pourquoi cela peut-il poser problème ?

    Attention, je veux une réponse profonde, presque "koalesque" si je peux me permettre. Je ne découvre pas non plus tous ces aspects de nos métiers, mais bon j'aimerais comprendre de manière .... radicale (dans le sens étymologique).

    Merci d'avance !

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Pourquoi penses-tu que 2 versions d'une ib ne puissent être utilisées dans un même programme ?
    Tu risques d'avoir des collisions de noms mais rien qu'un ajout de namespace ne puisse régler.
    Ou encore les libs peuvent embarquer leur propre version de X ou Y lib.
    Sur certains projets j'ai vu jusque 4 ziplib en utilisation, toute de version différente parce que chaque lib utilise et intègre sa propre version.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Par défaut
    je t'avoue que je ne sais plus d'où me vient cette croyance, mais mes récents déboires avec OpenSSL et Qt avaient eu plutôt tendance à me confirmer la chose.

    Il ne s'agit peut-être que d'une remarque d'un prof il y a 10 ans qui est resté ou de souci de compatibilité que j'ai pu rencontrer en manipulant plusieurs versions.

    J'ai eu des soucis récemment avec Qt pour faire fonctionner une app avec OpenSSL 1.1 alors que Qt lui est compilé avec openssl 1.0.

    Qt 5.12.4 a été release cette année avec une note qui dit :

    The update to OpenSSL 1.1.1 is important to note for users leveraging OpenSSL in their applications.
    We wanted to update now as the earlier version of OpenSSL runs out of support at the end of the year and some platforms, such as Android, need the new one even sooner.
    Unfortunately OpenSSL 1.1 is binary incompatible with 1.0, so users need to switch to the new one and repackage their applications.
    j'ai eu également le problème en utilisant une bibliothèque liées dynamiquement avec une version Qt différente de celle utilisée par mes soins pour une app (et un message au runtime "conflicting Qt version" ou message proche).

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 771
    Par défaut
    Pour moi, ta question est "bizarre"

    C'est le principe du chargement [semi-]dynamique d'une bibliothèque
    Pour le chargement statique c'est différent, parce que toute ta bibliothèque se retrouve à l'intérieur de ton exécutable (avec au moins les conflits que cela engendre)

    Sous Windows, la fonction LoadLibrary te retourne un HModule et c'est via ce dernier que tu vas faire tes appels.
    Donc Qt lui charge son OpenSSL, toi tu charges ton OpenSSL - si ce sont des chargements dynamiques il devrait ne pas y avoir de problème.
    Il faut juste faire attention 1) au nom de ta bibliothèque chargée (il doit être unique - par exemple y renseigner la version) 2) au chemin où elle se trouve

    Ensuite, là où cela peut coincer, ce sont les objets statiques/ commun.
    Par exemple, un fichier temporaire pour un générateur aléatoire. Comme il y a des verrous sur les fichiers, 1 seule bibliothèque peut l'utiliser.

  5. #5
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 760
    Par défaut
    Pour Qt, le maître mot est "binairement incompatible". C'est tout le problème d'une bibliothèque, l'API évolue et on se retrouve alors dans 3 situations:

    - Les types exposés aux utilisateurs changent par l'ajout, suppression ou déplacement de membres: binairement incompatible, le programme ferra n'importe quoi, mais il suffit de recompiler et tout roule. Sauf bien sur si on utilise un membre qui n'existe plus .
    - Des fonctions sont supprimées, les signatures changent: binairement incompatible et le programme ne va pas retrouver les fonctions. Pareil que précédemment, il faut recompiler.
    - Il y a plein de changement, mais l'API public est stable ou ne contient que l'ajout de fonction: rien à faire.

    OpenSSL est dans les 2 premières situations: les APIs public ont changée, les types n'exposent plus les membres, ils sont maintenant opaques et certaines fonctions sont supprimées. Il faut donc recompiler et mettre à jour les applications qui en dépendent et mettre à jour les dépendances des paquets.

    Après, au niveau des bibliothèques, il y a un second problème: 2 versions d'une même bibliothèque avec les mêmes noms de fonction ne peuvent pas être linkés: il y a des conflits. On peut pallier à ce problème en chargeant manuellement les bibliothèques. C'est un peu plus fastidieux, mais cela permet de faire cohabiter plusieurs versions d'une même bibliothèque.

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Et ensuite, il reste les bibliothèques qui emploient des variables globales, qui peuvent être problématiques si elles ne sont pas prévues pour marcher ensemble, ou pas prévues pour garantir l'isolation totale.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/10/2016, 15h05
  2. [MySQL-5.0] Comparer deux versions d'une même table
    Par ypcman dans le forum Requêtes
    Réponses: 4
    Dernier message: 06/08/2015, 17h22
  3. Deux versions sur un même poste ?
    Par Christophe P. dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 10/10/2014, 12h40
  4. [BO 5.1.6] [BO6.5.1] Travailler avec deux versions BO sur le même poste
    Par l_ourse dans le forum Administration-Migration
    Réponses: 7
    Dernier message: 05/03/2008, 10h35
  5. Réponses: 2
    Dernier message: 23/01/2006, 15h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo