سلام دوستان عزیز
در این پست میخواهیم در رابطه با این صحبت کنیم که چجوری میشه، آخرین نسخهی زنجیرهی ابزار که توانگلیسی بهش میگن toolchain رو روی توزیعهای بر پایهی اوبونتو (که شامل تریسکل، خود اوبونتو، مینت و ... میشه) نصب کنیم.
زنجیرهی ابزار مجموعه ابزارهایی هست که برای نوشتن و کامپایلکردن و ... به منظور تولید یک نرمافزار استفاده میشود. و شامل GCC هم میشه.
برای نصب آخرین نسخهی GCC فقط کافیه که PAA زیر رو به سیستممون اضافه کنیم:
ppa:ubuntu-toolchain-r/test
که با استفاده از دستور زیر اضافه میشه:
$ sudo add-apt-repository ppa:ubuntu-toolchain-r/test
و طبق معمول باید بعدش لیست نرمافزارهای موجود در سیستممون رو بهروز کنیم:
$ sudo apt-get upadte
حالا نسخههای جدید نرمافزارها در دسترس هستند و میتونیم اونها رو براحتی نصب کنیم.
فقط باید درنظر داشته باشیم که این نرمافزارهای جدید با قبلیها جایگزین نمیشن.
مثال عملی: من روی تریسکل ۶ جیسیسی (GCC) دارم. برای اینکه بفهمم نسخهی gcc من چند هست، دستور زیر رو توی ترمینال میزنم:
$ gcc --version
و به من جواب زیر رو میده،
gcc (Ubuntu/Linaro 4.6.4-1ubuntu1~12.04) 4.6.4
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
حالا طبق چیزایی که بالا گفتم، اون مخزن رو اضافه میکنم و لیست مخازن رو بروز میکنم. حالا نرمافزار synaptic رو اجرا میکنم. و اگه ندارمش با دستور زیر نصبش میکنم:
$ sudo apt-get install synaptic
حالا نرمافزار synaptic رو اجرا میکنم و به قسمت origin میرم و سپس LP-PPA-ubuntu-toolchain-r-test/precise و نگاه میکنم که آخرین نسخهی GCC یا g++ یا gfotran یا ... چی هست، اون رو نصب میکنم.
الان نسخهی قبلی gcc که ۴٫۶ هست و نسخهی جدید که ۴٫۸ هست به صورت همزمان رو سیستم من نصب هستند، برای اطمینان بازدوباره دستورهای زیر رو میزنم تا ببینم که چه خروجی میدن:
$ gcc --version
و
$ gcc-4.8 --version
الآن هر موقع که خواستم از gcc نسخهی جدید استفاده کنم به طور مثال برای کامپایل کردن یه کد سادهی c، به جای دستور:
$ gcc -Wall test.c
از دستور زیر باید استفاده کنم:
$ gcc-4.8 -Wall test.c
و یا IDE مورد استفادهام رو تنظیم کنم به جای gcc از gcc-4.8 استفاده کنه.
از اینجا به بعد برای حرفهایترها است:
حالا این سوال پیش مییاد که یکی حوصلهاش نمیشه هرسری توی ترمینال تایپ کنه gcc-4.8 و میخواید با تایپ کردن gcc خودش بره سر وقت gcc-4.8.
مراحل انجام این کار:
۱. پاک کردن رابط (لینک) gcc
۲. ایجاد یک رابط جدید برای gcc که به gcc-4.8 اشاره داشته باشه.
۱. از اول همه سر وقت جایی میریم که عمدهی رابطها (link) اونجا هستن یعنی:
/usr/bin
با استفاده از دستور cd به اون دیرکتوری میریم:
$ cd /usr/bin
حالا میخوایم یه نگاه بندازین ببینیم که کلاً چه فایلها یا دیرکتوریهایی اونجا هست، که برای اینکار از دستور ls استفاده میکنیم:
$ ls
که یه خروجی زیادی بهمون میده. حالا میخوایم جستوجو رو تنگتر کنیم و به ترمینال میگیم، همهی خروجیها رو نشون نده، توی خروجیها بگرد و اونهایی رو که حاوی کلمهی gcc هستند به من نشون بده:
$ ls | grep gcc
که برای من این دستور چنین خروجی رو میده:
c89-gcc
c99-gcc
gcc
gcc-4.6
gcc-4.8
gcc-ar-4.8
gcc-nm-4.8
gcc-ranlib-4.8
winegcc
x86_64-linux-gnu-gcc
x86_64-linux-gnu-gcc-4.6
x86_64-linux-gnu-gcc-4.8
x86_64-linux-gnu-gcc-ar-4.8
x86_64-linux-gnu-gcc-nm-4.8
x86_64-linux-gnu-gcc-ranlib-4.8
حالا فایل gcc رو به gcc.poshtiban تغییر نام میدم و از اونجایی که کاربر عادی نمیتونه فایلهای این دیرکتوری رو تغییر بده، باید اول دستورم sudo اضافه کنم:
$ sudo mv gcc gcc.poshtiban
الآن gcc دیگه وجود خارجی نداره :). اگر دستور gcc رو توی ترمینال بزنم این پیغام رو میده:
bash: /usr/bin/gcc: No such file or directory
الآن باید یه symbolic link (رابط سمبولیک) از gcc-4.8 بسازم، یعنی دقیقاً کاری که قبلاً برای gcc-4.6 شده بود، یعنی gcc یک رابط بود که به gcc-4.6 وصل میشد.
با استفاده از دستور ln می تونیم رابط مورد نظر رو بسازیم:
$ sudo ln --symbolic gcc-4.8 gcc
تموم شد :) الآن اگه توی ترمیینال بزنم:
$ gcc --version
خروجی زیر رو میده:
gcc-4.8 (Ubuntu 4.8.1-2ubuntu1~12.04) 4.8.1
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
این کار رو میشه برای g++، gfortran و ... هم انجام داد. فقط یادتون باشه اگه gcc رو به نسخههای بالاتر ارتقا دادید، یعنی به ۴٫۹ یا بالاتر، بایستی رابط سمبولیک رو بازدوباره بسازید ولی این بار برای gcc-4.9 :)
اگر هم جایی خرابکاری کردید، فقط کافیه که gcc رو پاک کنید:
$ sudo rm gcc
و اون gcc رو که به عنوان پشتیبان نگه داشته بودیم، به اسم اصلیش یعنی gcc تغییر نام بدیم:
$ sudo mv gcc.poshtiban gcc