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

1 2 3 4 5
Avatar
Fabien LE LEZ
On 27 Oct 2005 11:37:57 +0200, Jean-Marc Bourguet :

Nous sommes en position d'imposer un ensemble minimum de patch
installe et de patchs absent.


T'as du bol...
Quant à moi, je sais que la plupart de mes clients ont des
installations de Windows bien abimées par des logiciels foireux. Donc,
j'essaie de faire en sorte que mes programmes fonctionnent même sur
des systèmes où une partie de Windows manque. L'idéal étant que si sur
un PC Windows est assez stable pour accéder au menu démarrer et lancer
le programme, ce dernier pourra fonctionner correctement.

Avatar
Aurélien Barbier-Accary
Aurélien Barbier-Accary wrote:

moi naivement je compile (sous g++) avec -ansi -pedantic et je
me dis que ça doit quasiment suffir à assurer la compatibilité
du code source...



Tu rigoles, n'est-ce pas ? Tu as oublié le :-). Le code qui
passe une version de g++ avec ses options ne passe même pas
forcement la prochaine version -- j'ai dû réécrire beaucoup de
choses lors du passage de 2.95.2 à 3.4.3, par exemple, et il y a
toujours des rapports des choses qui marchait en 3.3.x, mais non
en 3.4.x. Et je ne parle que de g++ -- si j'ajoute Sun CC (qui
est encore très loin de la norme), la situation s'empire.

Le problème actuellement, c'est qu'il y a très peu de
compilateurs réelement conformes -- g++ (au moins 3.4.3) ne
l'est pas totalement, et certains autres (comme Sun CC) en sont
encore plus loin. Du coup, même si tu écris du code 100%
conforme, il n'y a aucune garantie à ce qu'un compilateur donné
ne l'accepte.



Disons que comme tous ceux qui utilisent mes librairies travaillent avec gcc je
ne me casse pas la tête et je fais confiance aux standards pour s'imposer
doucement :-O
C'est comme pour XHTML/CSS, avant de trop se casser la tête pour faire quelque
chose d'universel il faut voir à qui on s'adresse et établir un rapport
bénéfice/coût.
Moi mon souci c'est plus de pouvoir travailler exactement de la même manière
sous linux et windows, et donc que mon code, mes Makefile et les libraries que
j'utilise se comportent de la même manière sous ces deux OS.
D'après ce que je lis je vois qu'en tant que professionnels vous avez des
problèmes d'universalité à cause de l'hétérogénéité du parc de vos clients, moi
je suis dans le milieu universitaire et comme l'argent manque, tout le monde
travaille avec des outils gratuits, et donc gcc, Qt, ... Il faut bien qu'il y
ait des avantages au manque de moyens ;-p


Avatar
Fabien LE LEZ
On Thu, 27 Oct 2005 12:14:42 +0200, Aurélien Barbier-Accary
:

moi
je suis dans le milieu universitaire et comme l'argent manque, tout le monde
travaille avec des outils gratuits, et donc gcc, Qt, ...


... Borland C++ (le compilateur, pas le RAD), wxWidgets...

C'est pas parce qu'on se limite au gratuit qu'on n'a pas
d'hétérogénéité.

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:


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.

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

Rémy


Avatar
Aurélien Barbier-Accary
On Thu, 27 Oct 2005 12:14:42 +0200, Aurélien Barbier-Accary
:


moi
je suis dans le milieu universitaire et comme l'argent manque, tout le monde
travaille avec des outils gratuits, et donc gcc, Qt, ...



... Borland C++ (le compilateur, pas le RAD), wxWidgets...

C'est pas parce qu'on se limite au gratuit qu'on n'a pas
d'hétérogénéité.



oui, c'est vrai, il faudra que je teste ça un de ces jours pour voir ce que ça
donne...


Avatar
AG
Fabien LE LEZ wrote:

J'ai l'impression que la majorité des programmeurs ne sont même pas au
courant du problème -- voire, ne sont pas au courant qu'il existe un
autre compilo que celui qu'ils utilisent. En gros, si Visual C++
autorise "main()" à la place de "int main()", je l'utilise sans
vergogne, et tant pis si d'autres compilateurs râlent ("Uh ? Il
existerait d'autres compilateurs ? Tu plaisantes ?")


Bonjour Fabien

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 pouvoir
compiler un code source sur différentes machines ?

AG.

Avatar
Jean-Marc Bourguet
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 pouvoir
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.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Jean-Marc Bourguet
"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? Je n'ai parle que d'un build regulier sur les
plateformes pour lesquelles le programme est release.

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.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org



Avatar
Jean-Marc Bourguet
Fabien LE LEZ writes:

On 27 Oct 2005 11:37:57 +0200, Jean-Marc Bourguet :

Nous sommes en position d'imposer un ensemble minimum de patch
installe et de patchs absent.


T'as du bol...
Quant à moi, je sais que la plupart de mes clients ont des
installations de Windows bien abimées par des logiciels foireux. Donc,
j'essaie de faire en sorte que mes programmes fonctionnent même sur
des systèmes où une partie de Windows manque. L'idéal étant que si sur
un PC Windows est assez stable pour accéder au menu démarrer et lancer
le programme, ce dernier pourra fonctionner correctement.


Je sais bien que le controle de l'environnement peut etre vraiment
problematique.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org


Avatar
Matthieu Moy
Jean-Marc Bourguet writes:

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 pouvoir
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.


Ça dépends aussi si tu livres les sources ou le binaire. Pour une
bibliothèque pleine de templates, il vaut mieux que la totalité de ton
code soit compilable avec le compilateur du client ...

--
Matthieu


1 2 3 4 5