Notre entreprise achètera un morceau de code source volumineux et très complexe pour les communications par satellite. Il est codé en C ++ et nous y coderons des ajouts, également en C ++, reliant notre code avec le code acheté en une seule unité exécutable.
Ça m'a l'air bien!
Est-il nécessaire d'utiliser le même compilateur et la même version de compilateur que ceux utilisés pour développer le code acheté?
De manière générale, non ce n'est pas nécessaire. Le but de C ++ est d'agir comme une abstraction sur ce genre de choses, donc un programme C ++ bien écrit compilera aussi bien sur votre chaîne d'outils que sur l'auteur d'origine, et le programme résultant aura le même résultat. Les performances peuvent varier, car différents compilateurs sont bons dans différentes choses, mais le comportement fondamental du programme ne doit pas changer.
Cependant, un logiciel mal écrit peut dépendre d'un comportement spécifique à l'implémentation, voire d'un comportement non défini. Il peut émettre des hypothèses sur les types intégrés ou sur l'endianité de la plate-forme. Même un logiciel bien écrit peut ne pas avoir d'autre choix que de s'appuyer sur des extensions non standard qui ne sont pas disponibles sur la chaîne d'outils que vous avez choisie, ou il peut le faire car il n'était tout simplement pas nécessaire de passer du temps à ajouter une couche de portabilité pendant la durée de le projet d'origine.
En fin de compte, vous devrez demander à l'auteur / au vendeur à quoi le code source est écrit. S'ils affirment qu'il est spécifiquement écrit contre, disons, Visual Studio 2015 et nécessite des fonctionnalités de l'API Windows, vous devriez probablement vous en tenir à cela. Mais s'ils prétendent qu'il est portable, C ++ standard, alors utilisez le compilateur que vous aimez. Assurez-vous que votre contrat d'achat comprend un accord de support afin que vous puissiez obtenir de l'aide gratuite lorsqu'il s'avère que le vendeur mentait.
Faut-il utiliser la même version de C ++ que le code acheté? S'il n'utilise pas 2014, nous pourrions vouloir en utiliser certaines fonctionnalités, mais pas s'il peut y avoir des problèmes avec le mélange de différentes versions.
Probablement. Peut être.
C ++ 03 est compatible avec la plupart du temps, donc si le code est C ++ 03, il est peu probable que vous ayez un problème. (Bien que certains ajustements puissent être nécessaires.)
Mais les fonctionnalités introduites dans C ++ 11 et C ++ 14 ne sont pas rétrocompatibles, donc si le fournisseur utilise, par exemple, C ++ 11 lambdas, et que vous essayez de construire leur code dans un compilateur C ++ 03, qui vient de gagner ça marche pas.
En théorie, bien sûr, cela ne devrait pas avoir d'importance, en particulier la version du langage, mais il est concevable que différentes versions du compilateur génèrent un code objet différent, ce qui peut entraîner des différences de synchronisation, etc.
Absolument. Si le code s'appuie tellement sur une implémentation spécifique pour obtenir les résultats attendus, alors c'est au vendeur d'être responsable et de vous en informer. Puisque nous vivons dans le monde réel, je recommande d'être diligent et de leur demander d'abord.
Et je ferai écho à ce que les autres ont dit: assurez-vous que vous avez une sorte de recours de soutien, afin que s'ils dénaturent l'une des réponses à ces questions (que ce soit intentionnellement ou non), vous ne finissez pas par assumer le coût résultant.