OVH Cloud OVH Cloud

Differents compilateurs, differents C++

58 réponses
Avatar
Fabien LE LEZ
Bâjour,

Le C++ a beau être standardisé, bien souvent un code prévu pour tel ou
tel compilateur n'est pas compilable avec d'autres, même avec des
bibliothèques identiques.

Quelques exemples :

- Je dois faire des DLL pour AviSynth (logiciel de traitement de
la vidéo). Je n'ai pas réussi à compiler le code sous autre chose que
Visual C++ : Comeau accepte de le compiler mais refuse de faire une
DLL ; gcc et Borland C++ refusent carrément le code.

- J'ai voulu intégrer une bibliothèque open-source, ffmpeg, dans
mon code. J'ai dû y renoncer, car je programme sous BC++ et le code de
la bibliothèque est en gcc. Du coup, j'ai créé une DLL avec g++, que
j'appelle depuis mon programme compilé sous BC++. (Heureusement que
COM m'y autorise !)

- Le mois dernier, je me suis penché sur le remplacement de
Borland C++. J'ai donc essayé de compiler mon code sous Visual C++ et
Comeau. J'ai fini par y arriver (sauf pour le link -- y'a des
ressources qui merdent, mais c'est hors-sujet ici), mais ce fut un
travail assez fastidieux, et j'aurais vraiment eu du mal si ce n'avait
pas été un code que je connais bien.
(J'avais déjà abandonné la piste g++ car je n'avais pas réussi à
y compiler OWL (bibliothèque GUI) correctement.)

Aussi aimerais-je savoir comment vous gérez ce problème, tant pour
votre code (vérification avec plusieurs compilos différents ?), que
pour les bibliothèques (celles dont le source est fourni bien sûr).

Merci d'avance...

10 réponses

2 3 4 5 6
Avatar
Fabien LE LEZ
On Thu, 27 Oct 2005 13:46:55 +0200, AG :

Quel est l'intéret de pouvoir compiler un source sur une machine avec
différents compilateurs ?


Pour les logiciels "end-user", ça permet de changer de compilateur en
cours de développement, si on s'aperçoit qu'il ne convient plus (trop
vieux par exemple). Et faire passer un code de g++ 2.9.x à gcc 3.x, ou
de Visual C++ 6 à VC++ 7 peut être sacrément problématique, sans même
parler de faire passer un code de VC++ 6 à g++ 3.x.

Pour les bibliothèques, le problème est encore plus visible : si une
bibliothèque a été prévue pour gcc uniquement, et que je veux
l'utiliser dans mon programme développé sous Borland C++ 5.02, je suis
dans la merde. Au mieux, je ne passe que quelques jours à rendre le
code utilisable ; au pire, je suis obligé d'utiliser des sales
bricolages, voire d'abandonner et de chercher une autre bibliothèque.

Idem pour les logiciels "open-source" : bien souvent, il faut avoir la
même version du même compilateur que l'auteur du programme pour
pouvoir le modifier et le recompiler.
On peut même se demander si un logiciel fourni avec ses sources en
VC++ 6 peut être appelé "open-source"...

Avatar
Dominique.Micollet
In article ,
"kanze" writes:
et pas de bibliothèque standard, du tout.)


Juste pour ma culture : on fait comment pour se passer des
bibliothèques standards ?



--
Cordialement

Dominique MICOLLET Email : enlevez le .fr.fr
Universite de Bourgogne
9, Avenue Alain SAVARY BP 47870 Tel : +33/(0)3-80-39-59-27
21078 DIJON CEDEX FRANCE Tfx : +33/(0)3-80-39-68-69

Avatar
Fabien LE LEZ
On Thu, 27 Oct 2005 14:08:07 +0200, Matthieu Moy :

Ça dépends aussi si tu livres les sources ou le binaire.


Qu'entends-tu par "binaire" ?
Si c'est une DLL, suivant le contenu et l'OS, il est possible qu'elle
soit compatible avec plusieurs compilateurs.
Si c'est une bibliothèque statique, il faut généralement en fournir
une par compilateur, et donc il faut que tu puisses compiler ton code
sur chaque compilo.

Avatar
Fabien LE LEZ
On 27 Oct 2005 14:04:02 +0200, Jean-Marc Bourguet :

Le test est un autre probleme, en particulier quand on maitrise mal
les dependances environnementales.


Pas totalement. J'ai vu du code prévu pour gcc compiler sous Borland
C++, mais planter à l'exécution, ou vice-versa. Je précise que les
tests d'exécution ont été effectués sur la même machine.

Il y a d'ailleurs des chances pour que le code en question ne
fonctionne sous gcc que par hasard...

Avatar
Fabien LE LEZ
On 27 Oct 2005 12:19:27 GMT, :

Juste pour ma culture : on fait comment pour se passer des
bibliothèques standards ?


A priori, on ne s'en passe pas. Seuls les appels directs sont
interdits ; on n'a le droit de l'utiliser qu'en passant par
l'encapsulation officielle.

Avatar
Rémy
"Jean-Marc Bourguet" a écrit dans le message de news:

"Rémy" writes:

"Jean-Marc Bourguet" a écrit dans le message de news:

"Rémy" writes:

"Jean-Marc Bourguet" a écrit dans le message de
news:


Je crois que le problème est beaucoup plus financier.

Achat des machines, contrats de maintenance, achat des licences des
compilateurs,...


Si tu releases sur ces machines avec ces compilateurs, tu les as les
machines et les licenses. Donc pour le coût il n'y a "que" le fait de
les laisser tourner pendant la nuit les machines faire les builds et
les tests.

A+


Tout à fait, mais si tu développes pour une seule cible (ou deux ou
trois) en essayant quand même d'être portable (pour le futur par
exemple), le coût de cette solution (qui reste malgré tout la seule
fiable) est prohibitif.


Quelle solution?


Celle qui permet de s'assurer que le code est compatible avec différents
compilateurs: la seule solution est bien d'essayer de builder avec les
compilateurs en question.

Je n'ai parle que d'un build regulier sur les
plateformes pour lesquelles le programme est release.



J'avais compris "un build régulier sur différentes plateformes", mais je
n'ai pas vu "pour lesquelles le programme est releasé"...


Par ailleurs pour un matériel donné, le nombre de combinaisons
(version OS + version compilateur + version des outils externes
utilisés) est "explosif"...


On est en train de deriver. Au depart la question etait "comment
s'assurer qu'on ecrit bien dans le sous-ensemble commun a tous les
compilateurs" a laquelle j'ai repondu "nous ne faisons rien de plus
que des builds reguliers pour les plateformes pour lesquelles nous
releasons".

Le test est un autre probleme, en particulier quand on maitrise mal
les dependances environnementales.



Je ne parlais pas des tests, mais bien des builds...




Avatar
Fabien LE LEZ
On Thu, 27 Oct 2005 13:46:55 +0200, AG :

Quel est l'intéret de pouvoir compiler un source sur une machine avec
différents compilateurs ?


Note aussi qu'avec deux compilateurs, tu as deux fois plus de chances
d'obtenir un warning en cas de comportement indéfini.

Avatar
adebaene
Jean-Marc Bourguet wrote:
AG writes:

Quel est l'intéret de pouvoir compiler un source sur une machine avec
différents compilateurs ? Le test intéressant n'est-il pas de pouvo ir
compiler un code source sur différentes machines ?


Plus tu utilises de compilateurs differents, moins tu as de risque
qu'un nouveau compilateur pose un probleme.


Argument spécieux : Si tu cibles *une* plate-forme, quel intérêt
d'utiliser plus d'*un* compilateur (et donc quel intérêt d'en tester
plusieurs dans l'espoir d'être compatible avec le prochain...) ???

Arnaud


Avatar
Fabien LE LEZ
On 27 Oct 2005 07:14:53 -0700, :

Si tu cibles *une* plate-forme, quel intérêt
d'utiliser plus d'*un* compilateur


Imagine que tu développes sous g++ 2.9.x, et qu'un jour tu décides de
passer à g++ 3.x.
Ou que tu développes sous Visual C++ 6, et qu'un jour tu décides de
passer à Visual C++ 200x.

Avatar
Matthieu Moy
writes:

Argument spécieux : Si tu cibles *une* plate-forme, quel intérêt
d'utiliser plus d'*un* compilateur (et donc quel intérêt d'en tester
plusieurs dans l'espoir d'être compatible avec le prochain...) ???


Il y a un truc qui dit que les trucs pas portables sont souvent aussi
des trucs « qui craignent » dans l'absolu.

Par exemple, sauf pour des trucs de vraiment bas niveau, tu as
rarement envie que ton programme soit sensible à l'endianness, même si
tu n'as qu'une seule cible (si tu es sensible à l'endianness sans t'en
rendre compte, il y a 95% de chances pour que tu te soit gourré dans
un cast).


L'autre intérêt, c'est que même si a un instant t, tu ne vises qu'une
seule plateforme, c'est quand même une bonne idée de ne pas se bloquer
la possibilité d'une migration future. Par exemple, le noyau Linux est
testé avec des versions de développement de GCC, alors que personne
n'utilise pour de vrai ces versions de développement, mais ça permet
d'anticiper les problèmes (là, j'admet que c'est un cas particulier,
puisque les gens savent qu'ils vont migrer vers la version suivante de
GCC).

--
Matthieu

2 3 4 5 6