Comment construisez-vous une bibliothèque (static lib ou dll/so) afin qu'elle ne soit pas sensible aux futures mises à jour des librarires d'exécution C du système?C Compatibilité de la version de la bibliothèque d'exécution: les mises à jour nécessitent des recréations?
À la fin de Juillet, Microsoft updated un groupe de bibliothèques, y compris les bibliothèques d'exécution C. Notre application est écrite avec un mélange de MFC/C++/VB et certaines bibliothèques tierces, y compris certaines qui sont à source fermée.
J'ai été occupé à recompiler toutes les bibliothèques dont nous avons la source, mais je me demande si c'est vraiment nécessaire? Que se passera-t-il si nous lions ou chargeons une bibliothèque construite avec une version antérieure du runtime C?
Lors de la recompilation de ce matériel, quels sont les paramètres du compilateur et de l'éditeur de liens qui doivent être identiques entre l'application principale et les bibliothèques de support? J'ai découvert que le réglage de la bibliothèque d'exécution doit être le même (nous utilisons la version multi-threaded/MD et/MDd), mais je suis inquiet pour les autres paramètres. J'ai extrait tous les paramètres dans les feuilles de propriétés de Visual Studio et j'utilise les mêmes feuilles pour tous nos différents projets, mais cela ne fonctionne pas pour les bibliothèques tierces et je pense que c'est excessif.
J'ai remarqué que l'éditeur de liens crachera un warning sur les bibliothèques en conflit, mais il suggère d'ignorer simplement les bibliothèques par défaut. Est-il sécuritaire de le faire? Cela semble être une solution très laide au problème.
Hmmm ... donc seules les primitives doivent être passées dans la bibliothèque. Chaque bibliothèque que j'ai utilise des trucs de la bibliothèque standard (comme std :: string) ou des trucs MFC (comme CString). Est-ce que la dernière partie de votre réponse signifie que si je peux lier, alors je vais très bien aller? Quand je regarde autour des bibliothèques sur le net, ils disent souvent VS2005 ou VS2008 pour leur version, mais pas la version réelle de CRT (comme 8.0.50727.4053). Donc, de toute évidence, quelque chose qui compte est différent entre VS2005 et VS2008, mais les différences au sein d'une version n'a pas d'importance? – criddell
En ce qui concerne la liaison statique, l'éditeur de liens devrait donner des avertissements en cas de problème. Si vous utilisez des DLL et passez des types STL, l'éditeur de liens peut ne pas déterminer la version d'exécution correcte et votre application va planter au moment de l'exécution. Si vous utilisez des DLL, ces DLL fonctionneront normalement avec une version plus récente des DLL d'exécution, à moins que la DLL ne repose sur certains bogues d'exécution ou que Microsoft change de définition de type. Donc, normalement, il devrait être prudent de changer les DLL d'exécution si la version reste la même, mais la seule façon d'être sûr est de ne pas passer les types STL ou de les recompiler. – Bernd