{"id":587,"date":"2009-07-01T20:29:20","date_gmt":"2009-07-01T18:29:20","guid":{"rendered":"http:\/\/linux.leunen.com\/?p=587"},"modified":"2009-07-01T20:29:20","modified_gmt":"2009-07-01T18:29:20","slug":"comment-compiler-soi-meme-une-application","status":"publish","type":"post","link":"https:\/\/www.leunen.com\/linux\/2009\/07\/comment-compiler-soi-meme-une-application\/","title":{"rendered":"Comment compiler soi-m\u00eame une application"},"content":{"rendered":"<p>Beaucoup de gens ont peur de devoir compiler une application. Je reconnais que c&rsquo;est une op\u00e9ration \u00e0 ne pas conseiller. Sous Ubuntu, la m\u00e9thode recommand\u00e9e pour installer une application est de passer par <em>Synaptic<\/em> pour installer un paquet qui se trouve dans les d\u00e9p\u00f4ts officiels d&rsquo;Ubuntu. Un paquet comprend l&rsquo;application pr\u00e9compil\u00e9e pour ubuntu et toutes ses d\u00e9pendances au sens large. En ligne de commande, vous utiliserez <em>apt-get<\/em> ou <em>aptitude<\/em>.<br \/>\nMais il est des situations o\u00f9 il peut \u00eatre int\u00e9ressant de compiler soi-m\u00eame une application. C&rsquo;est le cas par exemple lorsque l&rsquo;application que vous voulez utiliser a un bug et que vous savez que la nouvelle version corrige ce bug. malheureusement pour vous, cette nouvelle version ne se trouve pas encore dans les d\u00e9p\u00f4ts d&rsquo;Ubuntu. La solution dans ce cas-l\u00e0 est de t\u00e9l\u00e9charger le code source de l&rsquo;application et de la compiler vous-m\u00eame.<\/p>\n<p>Pour illustrer cet article, je vous propose de compiler une application qui s&rsquo;appelle <em><a href=\"http:\/\/www.kalmbach.com.ar\/tabu.html\">tabu<\/a><\/em>  et qui ne se trouve pas dans les d\u00e9p\u00f4ts. <em>Tabu<\/em> est un lecteur audio bas\u00e9 sur <em>gstreamer<\/em>. Il ressemble \u00e0 ceci:<br \/>\n<center><br \/>\n<img loading=\"lazy\" src=\"http:\/\/linux.leunen.com\/wp-content\/uploads\/2009\/06\/Capture-tabu.png\" alt=\"tabu - audio player\" title=\"tabu - audio player\" width=\"300\" height=\"450\" class=\"center\" \/><br \/>\n<\/center><br \/>\nLa premi\u00e8re chose \u00e0 faire est de t\u00e9l\u00e9charger l&rsquo;archive contenant les sources du programmes. Dans le cas de <em>tabu<\/em>, les sources sont dans un fichier t\u00e9l\u00e9chargeable \u00e0 cette adresse:<br \/>\nhttp:\/\/www.kalmbach.com.ar\/download\/tabu_audio_player-1.4.1.tar.gz<\/p>\n<p>Pour t\u00e9l\u00e9charger l&rsquo;archive et la d\u00e9compresser, tapez ceci dans un terminal:<\/p>\n<pre class=\"codesource\">\r\n$ wget -c http:\/\/www.kalmbach.com.ar\/download\/tabu_audio_player-1.4.1.tar.gz\r\n$ tar -zxvf tabu_audio_player-1.4.1.tar.gz\r\n<\/pre>\n<p>La commande <em>tar<\/em> a cr\u00e9\u00e9 un r\u00e9pertoire <em>tabu_audio_player-1.4.1<\/em> \u00e0 l&rsquo;endroit o\u00f9 vous avez t\u00e9l\u00e9charg\u00e9 cette archive. Ce r\u00e9pertoire contient les sources du programmes plus un certain nombre de fichier n\u00e9cessaire \u00e0 la compilation de l&rsquo;application. Lisez aussi les fichiers README et INSTALL. Ce dernier en g\u00e9n\u00e9ral, contient les instructions donn\u00e9es par l&rsquo;auteur de l&rsquo;application pour compiler le programme. Dans ce cas-ci, on peut y lire que le programme n\u00e9cessite les classiques <em>configure + make + make install<\/em>.<\/p>\n<p>Avant de pouvoir compiler le programme, il faut que les outils de compilation soient install\u00e9s. Si ce n&rsquo;est pas le cas, installez-les en faisant:<\/p>\n<pre class=\"codesource\">\r\n$ sudo aptitude install build-essentials\r\n<\/pre>\n<p>Commen\u00e7ons la compilation. La premi\u00e8re chose \u00e0 faire est de lancer configure qui va tester si toutes les librairies dont a besoin le programme sont pr\u00e9sentes sur votre PC et donnera une erreur dans le cas contraire. Il permet aussi de d\u00e9finir certains param\u00e8tres.<br \/>\nComme je veux que le programme soit install\u00e9 dans <em>\/opt\/tabu<\/em>, <em>\/opt<\/em> \u00e9tant l&rsquo;endroit o\u00f9 j&rsquo;installe tous les programmes que je compile ou qui ne viennent pas des d\u00e9p\u00f4ts officiels, on peut ajouter \u00e0 la commande <em>configure<\/em> un param\u00e8tre auquel on donne le r\u00e9pertoire o\u00f9 le programme doit \u00eatre install\u00e9.<br \/>\nRendons-nous dans le r\u00e9pertoire o\u00f9 se trouvent les sources et lan\u00e7ons la configuration:<\/p>\n<pre class=\"codesource\">\r\n$ cd tabu_audio_player-1.4.1\r\n$ .\/configure --prefix=\/opt\/tabu\r\n<\/pre>\n<p>On peut voir que le programme <em>configure<\/em> teste un tas de choses. Ce sont toutes les lignes <em>checking&#8230;<\/em> Mais \u00e0 la fin, on peut lire ceci:<\/p>\n<pre class=\"codesource\">\r\nchecking for GSTREAMER... configure: error: Package requirements (gstreamer-0.10 >= 0.10) were not met:\r\n\r\nNo package 'gstreamer-0.10' found\r\n\r\nConsider adjusting the PKG_CONFIG_PATH environment variable if you\r\ninstalled software in a non-standard prefix.\r\n\r\nAlternatively, you may set the environment variables GSTREAMER_CFLAGS\r\nand GSTREAMER_LIBS to avoid the need to call pkg-config.\r\nSee the pkg-config man page for more details.\r\n<\/pre>\n<p>Zut, une erreur! Il semble qu&rsquo;il ne trouve pas <em>gstreamer-0.10<\/em>. Pourtant <em>gstreamer<\/em> est un des \u00e9l\u00e9ments de base de <em>Gnome<\/em> pour tout ce qui est multim\u00e9dia. C&rsquo;est par exemple, <em>gstreamer<\/em> qui est utilis\u00e9 par <em>Totem<\/em>.<br \/>\nEn r\u00e9alit\u00e9 <em>gstreamer<\/em> est bien install\u00e9 mais pour pouvoir compiler <em>tabu<\/em>, le compilateur a besoin de la version de d\u00e9veloppement qui contient les fichiers d&rsquo;ent\u00eates de <em>gstreamer<\/em>. Autrement dit, si <em>configure<\/em> r\u00e2le sur une version d&rsquo;un programme manquant, c&rsquo;est en g\u00e9n\u00e9ral parce qu&rsquo;il ne trouve pas la version de d\u00e9veloppement. Un petit tour par <em>Synaptic<\/em> nous apprend qu&rsquo;effectivement, <em>libgstreamer0.10-dev<\/em> n&rsquo;est pas install\u00e9e. Installons-la et relan\u00e7ons <em>configure<\/em>:<\/p>\n<pre class=\"codesource\">\r\n$ sudo aptitude install libgstreamer0.10-dev\r\n$ .\/configure --prefix=\/opt\/tabu\r\n<\/pre>\n<p><em>configure<\/em> re-teste tout et&#8230;\u00e0 la fin, il nous donne une autre erreur:<\/p>\n<pre class=\"codesource\">\r\nchecking for TAGLIB... configure: error: Package requirements (taglib_c >= 1.5) were not met:\r\n\r\nNo package 'taglib_c' found\r\n\r\nConsider adjusting the PKG_CONFIG_PATH environment variable if you\r\ninstalled software in a non-standard prefix.\r\n\r\nAlternatively, you may set the environment variables TAGLIB_CFLAGS\r\nand TAGLIB_LIBS to avoid the need to call pkg-config.\r\nSee the pkg-config man page for more details.\r\n<\/pre>\n<p>Manifestement, il lui manque une librairie <em>taglibc<\/em> ou quelque chose d&rsquo;approchant. Un petit tour dans <em>Synaptic<\/em> nous montre qu&rsquo;il existe un ensemble de librairies qui portent le noms de <em>libtag*<\/em> dont une est une version de d\u00e9veloppement <em>libtagc0-dev<\/em>. Lorsque vous choisissez installer, <em>Synaptic<\/em> vous dit qu&rsquo;il doit aussi installer <em>libtag1-dev<\/em> et <em>libtagc0<\/em> pour que les d\u00e9pendances soient respect\u00e9es. Suivons les recommandations de <em>Synaptic<\/em> et relan\u00e7ons configure une troisi\u00e8me fois:<\/p>\n<pre class=\"codesource\">\r\n$ sudo aptitude install libtagc0-dev libtag1-dev libtagc0\r\n$ .\/configure --prefix=\/opt\/tabu\r\n<\/pre>\n<p>Cette fois-ci, plus d&rsquo;erreur. configure est content:<\/p>\n<pre class=\"codesource\">\r\nTabu 1.4.1 configuration summary:\r\n\r\n        prefix                   : \/opt\/tabu\r\n        source code location     : .\r\n        compiler                 : gcc\r\n        compiler flags           : -g -O2 -Wall\r\n\t      debug support            : no\r\n<\/pre>\n<p>Maintenant que tout est en ordre, que toutes les librairies n\u00e9cessaires sont install\u00e9es, il ne reste plus qu&rsquo;\u00e0 compiler le programme. Ceci se fait avec la commande make:<\/p>\n<pre class=\"codesource\">\r\n$ make\r\n<\/pre>\n<p>En principe tout doit bien se passer et vous ne devez pas avoir de message d&rsquo;erreur. Dans le cas de tabu, la compilation est rapide mais ce n&rsquo;est pas toujours le cas. Recompiler un noyau par exemple peut prendre d&rsquo;une demi-heure \u00e0 plusieurs heures suivant la palteforme et les options demand\u00e9es.<br \/>\nLe programme \u00e9tant compil\u00e9, on peut maintenant l&rsquo;installer dans son r\u00e9pertoire <em>\/opt\/tabu<\/em>. Ceci se r\u00e9alise avec la commande <em>make install<\/em> et doit se faire avec des droits d&rsquo;administration:<\/p>\n<pre class=\"codesource\">\r\n$ sudo make install\r\n<\/pre>\n<p>Dans le r\u00e9pertoire <em>\/opt\/tabu<\/em>, <em>make install<\/em> a cr\u00e9\u00e9 un r\u00e9pertoire <em>bin<\/em> dans lequel se trouve l&rsquo;ex\u00e9cutable et un r\u00e9pertoire <em>share<\/em> qui contient le fichier <em>applications\/tabu.desktop<\/em> qui est le fichier n\u00e9cessaire pour cr\u00e9er une entr\u00e9e dans le menu <em>Applications<\/em> de <em>Gnome<\/em>. Editez-le avec gedit et modifiez les lignes suivantes de fa\u00e7on \u00e0 ce qu&rsquo;elle contiennent ceci:<\/p>\n<pre class=\"codesource\">\r\nExec=\/opt\/tabu\/bin\/tabu\r\nIcon=\/opt\/tabu\/share\/pixmaps\/tabu.png\r\n<\/pre>\n<p>Ensuite copier ce fichier dans <em>\/usr\/shar\/applications<\/em>:<\/p>\n<pre class=\"codesource\">\r\n$ sudo cp \/opt\/tabu\/share\/applications\/tabu.desktop \/usr\/share\/applications\r\n<\/pre>\n<p>Voil\u00e0, votre application est compil\u00e9e et une entr\u00e9e se retrouve dans le menu Audio et vid\u00e9o.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Beaucoup de gens ont peur de devoir compiler une application. Je reconnais que c&rsquo;est une op\u00e9ration \u00e0 ne pas conseiller. Sous Ubuntu, la m\u00e9thode recommand\u00e9e pour installer une application est de passer par Synaptic pour installer un paquet qui se trouve dans les d\u00e9p\u00f4ts officiels d&rsquo;Ubuntu. Un paquet comprend l&rsquo;application pr\u00e9compil\u00e9e pour ubuntu et toutes [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[8,5],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/posts\/587"}],"collection":[{"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/comments?post=587"}],"version-history":[{"count":10,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/posts\/587\/revisions"}],"predecessor-version":[{"id":598,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/posts\/587\/revisions\/598"}],"wp:attachment":[{"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/media?parent=587"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/categories?post=587"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/tags?post=587"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}