Myriad Blog 1.3.0 Thursday, Apr 24th, 2014 at 02:42am 

Wednesday, Oct 19th, 2011 at 05:06pm
Ubuntu 11.10

 
 
Attention, c'est long et technique. Mais on y a pataugé dedans pendant plus d'une journée, alors autant faire profiter tout le monde des éclaboussures !
 
Avec Ubuntu 11.10, le compilateur C/C++ (gcc, g++) et l'éditeur de liens (ld) sont passés en version 4.6.1.
 
Il y a plusieurs changements dans ces nouvelles versions des outils qui brisent la compatibilité ascendante avec les anciens projets.
Obliger les programmeurs à reprendre leurs projets existants pour arriver à les faire fonctionner comme avant, avec le nouveau compilateur, est à notre avis une faute grave dans la conception d'un outil de développement.
Devoir de mathématiques: Obligez 10000 personnes à perdre leur temps pendant une heure, puis calculez la somme de temps perdu.
Réponse: 417 jours, soit plus d'un an de travail gâché.
Maintenant, considérez que nous n'y avons pas perdu une heure, mais plus d'un jour...
 
Donc, pour aider les autres programmeurs qui googlent par là, voici les problèmes que nous avons rencontrés et comment nous les avons résolus.
 
Pour rappel, nous avions des projets fonctionnels sur Ubuntu 11.04, sous Code:Blocks 10.05
 
Principalement, nous compilions une librairie bas niveau (accès graphiques et sonores) et un programme principal.
 
Après passage à Ubuntu 11.10, lors de la compilation, les "warnings" (avertissements) apparaissent comme des erreurs, et la génération ne passe pas l'étape de l'édition de liens.
 
Premier problème: la traduction de GCC
 
le compilateur C ou C++ (GCC/G++) est un outil en ligne de commande que les puristes utilisent directement.  
Le fondement de Linux est qu'il est possible d'utiliser ces outils de base au sein d'un programme plus évolué, qui crée la ligne de commande de manière transparente, et analyse les résultats pour les présenter de manière agréable.
C'est ce que fait Code:Blocks.
 
Mais, pour analyser les résultats des appels en ligne de commande, il faut que ceux-ci soient dans un format facilement analysable, et surtout que ce format soit documenté et fixe.
Or, il semble que dans la dernière version du compilateur GCC/G++, sur un système Ubuntu en français, les messages d'erreur et d'avertissement aient été traduits en français !
Au lieu de "Warning" on obtient "attention", etc.
 
Pour analyser automatiquement les sorties, il faudrait que Code:Blocks connaisse par exemple le mot "attention" dans la centaine de langues disponibles pour Linux ?!!
Nous avons donc modifié les paramètres de Code:Blocks pour lui faire comprendre ces nouveaux messages en français dans le texte:
 
- "Settings > Compiler & Debugger > Global compiler settings" onglet "Other settings"
- Cliquer "Advanced options..."
- Onglet "Output parsing"
Editer "Preprocessor warning"
Regular expression:
Code:
([][{}() \t#%$~A-Za-z0-9_:+/\.-]+):([0-9]+):([0-9]+):[ \t]([Aa]ttention.:[ \t].*)

Editer "Compiler warning"
Regular expression: même chose :
Code:
([][{}() \t#%$~A-Za-z0-9_:+/\.-]+):([0-9]+):([0-9]+):[ \t]([Aa]ttention.:[ \t].*)

 
- Remonter "Compiler note" au-dessus de "preprocessor error" dans la liste
 
Deuxième problème: l'éditeur de liens ld
 
Après compilation, l'édition de liens de notre projet échoue avec un message d'erreur du type :
Quote:

/usr/bin/ld: /usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/libgtk-x11-2.0 .so: undefined reference to symbol 'gdk_window_focus'
/usr/bin/ld: note: 'gdk_window_focus' is defined in DSO /usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/libgtk-x11-2.0 .so so try adding it to the linker command line
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/libgtk-x11-2.0 .so: could not read symbols: Invalid operation
collect2: ld a retourné 1 code d'état d'exécution

 
En gros, si on traduit en français :  
 
la fonction ne se trouve pas dans la librairie demandée.
Essayez donc d'ajouter cette librairie à votre projet
(ce qui est à la fois déjà fait, puisqu'il cherche déjà dedans, et inutile puisque la fonction n'y est apparemment pas).
De toute façons, aucune fonction n'est trouvée dans cette librairie.  
 
Voila. Je pense que, dans la série "messages d'erreur incompréhensibles et inutiles", ce n'est battu que par "erreur inconnue à un endroit indéterminé".
 
Après de longues recherches, voici ce que nous avons trouvé :
 
dans cette version l'éditeur de liens ld est devenu beaucoup plus strict dans la gestion des fonctions utilisées par une librairie, elle-même utilisée par un programme.
Auparavant, si on liait le programme Harmony à la librairie Acam, et que cette dernière appelait des fonctions de la librairie gdk, ça fonctionnait. Maintenant, non.
La manière de gérer les librairies partagées, avec leur versionnement, étant tellement compliquée, mal documentée et apparemment incompréhensible pas seulement pour nous, que plutôt que de tenter d'adapter nos projets au nouveau comportement de l'éditeur de liens, nous avons modifié ce comportement pour le rendre identique à celui d'avant.
 
Pour cela, dans les "Build options" de nos projets, onglet "Linker settings", cadre "Other linker options", il a fallu ajouter l'option -Wl,--no-as-needed avant la ligne `pkg-config gtk+-2.0 alsa libcurl --libs`
 
Une indication du nom de cette option aurait été bienvenue dans le message d'erreur lui-même, et nous aurait évité de perdre quelques poignées de cheveux supplémentaires.
 
En conclusion
 
Plus d'une journée de perdue pour simplement recompiler nos programmes. Maintenant seulement, on s'attaque aux divergences dans la gestion des fenêtres qui rendent notre programme incompatible avec le nouvel Ubuntu.  
 
Cela va probablement prendre un jour de plus (aux dernières nouvelles, cela semblerait provenir d'un bug dans la fonction gtk_window_set_opacity qui permet de créer des fenêtres semi-transparentes).
 
Et ça, c'était pour passer de la version d'Ubuntu 11.04 à 11.10. On n'ose même pas imaginer sans de bonnes sueurs froides ce que sera le passage à la version 12.0...
On peut critiquer Windows tant qu'on veut, mais nous avons eu moins de problèmes à passer 4 versions majeures de Windows pendant 15 ans (les programmes se sont toujours recompilés, et les ajustements étaient minimes) que de gérer les incompatibilités lors d'une mise à jour mineure d'Ubuntu comme celle-ci.
 
Ca ne laisse rien présager de bon, et on en vient à se demander si, en commençant à s'intéresser à Linux, on n'a pas coincé la manche de notre chemise dans un hachoir à viande.  
by Olivier Guillion
Comments

Comment from Nicou59 Wednesday, Oct 26th, 2011 at 05:56pm
(No subject)
Bon atterrissage alors  

Comment from Didier Guillion Tuesday, Oct 25th, 2011 at 05:03pm
Re: Ubuntu 11.10
@Nicou
Notre boulot, c'est comme le parachutisme, on hésite longtemps à se lancer, mais une fois parti, on ne recule plus.
D.

Comment from Nicou59 Thursday, Oct 20th, 2011 at 06:45pm
(No subject)
@Olivier
 
Merci pour cette réponse claire et précise. Il est évident qu'à deux, c'est plus chaud...  
Bon. La question est de savoir si vous avez eu beaucoup de demandes de nouvelles licences sous Linux. Personnellement, j'attendais la sortie d'Ubuntu 11.10 pour vous passer ma commande. mais comme cela semble compliqué, j'attends. Si 2 ou 3 personnes vous ont harcelé (oups désolé) pour obtenir cette version, cela ferait vraiment trop de boulot pour vous deux que de maintenir une version Linux. Peut-être continuer d'ajuster vos programmes sous wine causerait moins de travail et d'ennuis ?
Je comprends qu'il soit difficile de reculer pour vous  sur ce développement, mais si cela vous empêche de continuer à améliorer vos programmes, de laisser s'exprimer votre créativité, il ne serait pas idiot d'y réfléchir. Il n'y a que les c... qui ne changent pas d'avis.... et je tiens à ce que vos bras ne finissent pas en bouillie dans le hachoir !  

Comment from Olivier Guillion Thursday, Oct 20th, 2011 at 12:11am
Re: Ubuntu 11.10
@Nicou:
Quote:
Je suis effrayé par tout ce que vous venez de nous décrire.  
J'ai une question : les programmes actuellement fournis par Ubuntu 11.10 (Firefox, Thunderbird, Libre office...) semblent continuer à fonctionner comme avant sur la 11.04. Comment s'y sont pris les développeurs de ces programmes pour ne pas tomber dans l'écueil que vous décrivez ? Avaient-ils accès avant vous à une note indiquant ces modifications très particulières ?

 
Oui, je pense que les équipes de Firefox sont au courant des modifications à venir sur les systèmes. Déjà, ils semblent utiliser les compilateurs en version ligne de commande, et sont anglophones, donc pas de problème d'intégration dans un IDE ou de traduction des messages
 
Ensuite, ils n'utilisent peut-être pas de librairie faisant appel aux fonctions bas niveau. Les compilations de programmes d'un seul tenant fonctionnaient aussi chez nous. Ce n'est qu'avec ACAM que le problème se posait.
Et pour ce qui est du problème des fenêtres, si la fonction "gtk_window_set_opacity " n'est pas utilisée, tout marche comme avant. Perso, je ne suis pas parvenu à faire fonctionner correctement cette entrée sur ma machine virtuelle en 11.10, même sur des programmes de test hors ACAM.  
 
Enfin, s'ils sont 200 personnes à s'occuper de Firefox, je pense qu'ils n'en ont pas mis 100 à chercher les options de compilation permettant de recompiler tout ça, une seule personne a dû perdre sa journée. Mais nous, nous sommes deux...
 
@Ubuntu12.04
Quote:
la prochaine version ubuntu (12.04, comme Avril 2012, la 11.10 etant Octobre 2011) est une release speciale de maintenance sur un cycle de 3 ans, donc en gros, ca va etre une 11.10 ultra stable...

Ah oui, exact  
Je ne m'en étais pas aperçu. Aux tests de QI sur la logique des suites de nombres, je ne ramasserais pas beaucoup de points...
Quote:
Sinon regle d'or en developement, ne jamais developer en francais...

Bof bof bof, pas si sûr.
Nos outils de développement (IDE, etc) ont souvent été en langue anglaise, jusqu'à récemment, pour des raisons de commodité de vocabulaire.  
Mais :  
- nos OS et claviers sont en français depuis la sortie de Windows 3.1 et Mac OS 6
- jamais le fait d'avoir un OS en français n'a perturbé le fonctionnement d'un quelconque outil de développement jusqu'à maintenant.
- Incidemment, on se demande comment GCC qui existe depuis le pléistocène, n'a pas trouvé moyen de normaliser ses sorties d'erreurs, en faisant précéder le texte décrivant l'erreur (dans la langue qu'ils veulent) par quelque chose comme [W0424] pour "warning n° 424" ?

Comment from ubuntu 12.04 Wednesday, Oct 19th, 2011 at 10:26pm
(No subject)
la prochaine version ubuntu (12.04, comme Avril 2012, la 11.10 etant Octobre 2011) est une release speciale de maintenance sur un cycle de 3 ans, donc en gros, ca va etre une 11.10 ultra stable...
 
Sinon regle d'or en developement, ne jamais developer en francais...

Comment from Nicou59 Wednesday, Oct 19th, 2011 at 07:26pm
Questions
Je suis effrayé par tout ce que vous venez de nous décrire.  
J'ai une question : les programmes actuellement fournis par Ubuntu 11.10 (Firefox, Thunderbird, Libre office...) semblent continuer à fonctionner comme avant sur la 11.04. Comment s'y sont pris les développeurs de ces programmes pour ne pas tomber dans l'écueil que vous décrivez ? Avaient-ils accès avant vous à une note indiquant ces modifications très particulières ?


Most recent first
Oldest first

Top of page
Last update:  (c) Myriad 2013