GCC چیست؟ #
GCC یک کامپایلر پرکاربرد برای زبانهای برنامهنویسی مختلف است – کامپایلر یک ابزار نرمافزاری است که کدی را که شما برای برنامههای کامپیوتری مینویسید، که معمولاً به عنوان “کد منبع” شناخته میشود، به دستورالعملهایی که کامپیوتر میتواند بفهمد، ترجمه میکند. این فرآیند ترجمه به عنوان کامپایل شناخته میشود.
به عنوان بخش مهمی از توسعه نرمافزار آزاد و متنباز، GCC (مجموعه کامپایلرهای GNU) توسط بنیاد نرمافزار آزاد (FSF) از طریق تلاش مشترک توسعهدهندگان به رهبری ریچارد استالمن توسعه داده شد.
چگونه از جی سی سی استفاده کنیم؟ #
GCC به طور گسترده در ایجاد نرمافزار برای سیستمهای شبه یونیکس مورد استفاده قرار میگیرد و برای پلتفرمهای مختلف سازگار شده است که نشاندهنده سازگاری و انعطافپذیری آن در حوزه برنامهنویسی متنباز است.
GCC (مجموعه کامپایلرهای GNU) از زبانهای برنامهنویسی مختلفی برای کامپایل پشتیبانی میکند. اگرچه در ابتدا با زبان C توسعه داده شد، اما اکنون میتواند زبانهای برجسته زیر مانند C++، Fortran، Ada و Go را کامپایل کند.
پیش نیازها #
برای دنبال کردن این آموزش و نصب GCC در اوبونتو ۲۲.۰۴، به موارد زیر نیاز دارید:
- آخرین نسخه سرور اوبونتو نصب شده باشد ؛
- یک حساب کاربری با امتیازات مدیر.
۱. نحوه نصب GCC در اوبونتو ۲۲.۰۴ #
در قسمت اول این آموزش، نحوه نصب GCC روی اوبونتو را در سه مرحله و در قسمت دوم، نحوه کامپایل یک برنامه C را به شما نشان خواهیم داد.
ما روشهای مختلف نصب GCC و کامپایل یک برنامه C را بررسی خواهیم کرد و گزینههای مختلف را بررسی خواهیم کرد.
مرحله ۱: بهروزرسانی فهرست بستههای اوبونتو #
برای بهروزرسانی لیست بستهها، از دستور زیر استفاده کنید :
sudo apt update
مرحله ۲: نصب GCC روی اوبونتو #
حالا با دستور زیر GCC را نصب میکنیم.
sudo apt install gcc
اگر GCC از قبل روی سیستم شما نصب شده باشد، دستور، نسخه نصب شده را فهرست میکند.
شما میتوانید GCC را با بسته build-essential نصب کنید. این کار GCC و همچنین سایر بستههای محبوب مانند را نصب میکند makeکه اغلب با GCC برای خودکارسازی فرآیند کامپایل نرمافزارهای بزرگتر استفاده میشود.
برای نصب build-essentials، از دستور زیر استفاده کنید:
sudo apt install build-essential
مرحله ۳: نصب GCC را آزمایش کنید #
حالا بیایید بررسی کنیم که آیا GCC روی اوبونتو نصب شده است یا خیر:
gcc --version
این باید نسخه و مجوز GCC را به شرح زیر برگرداند:
gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
Copyright (C) 2021 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.
۲. نحوه کامپایل یک برنامه C #
اکنون که GCC را روی اوبونتو نصب کردهایم و همه چیز به درستی تنظیم شده است، میتوانیم به کامپایل یک برنامه C ادامه دهیم.
مرحله ۱: نوشتن یک برنامه ساده به زبان C #
ویرایشگر کد مورد علاقه خود را باز کنید و کد منبع C زیر را در آن بنویسید:
#include <stdio.h>
int main() {
printf("Welcome to novinhost Servers\n");
return 0;
}
فایل را با نام example1.c ذخیره کنید.
مرحله ۲: کامپایل example1.c با استفاده از GCC #
حالا که کد منبع خود را داریم، میتوانیم آن را با استفاده از دستور زیر با GCC کامپایل کنیم:
gcc example1.c
به طور پیشفرض، GCC کد منبع کامپایل شده را در فایلی به نام … خروجی میدهد.a.out
بیایید آن را اجرا کنیم و نتایج را بررسی کنیم:
didier@lab:~$ ./a.out
Welcome to NovinHost Servers
همچنین میتوانید نام خروجی را با استفاده از کلید switch -oو به دنبال آن نام دلخواه مشخص کنید:
gcc example1.c -o example1
مرحله ۳: ایجاد یک فهرست اسمبلی از برنامه C #
همچنین میتوانید از GCC برای تولید فهرست اسمبلی کد منبع C استفاده کنید. این کار را میتوان با استفاده از -Sسوئیچ انجام داد:
gcc -S example1.c
این دستور فایلی به نام ایجاد میکند example1.s. سپس میتوانید محتوای آن را با استفاده از دستور زیر نمایش دهید:
cat example1.s
خروجی باید مشابه کد زیر باشد:
.file "example1.c"
.text
.section .rodata
.LC0:
.string "Welcome to NOVINHOST Servers"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
endbr64
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
leaq .LC0(%rip), %rax
movq %rax, %rdi
call puts@PLT
movl $0, %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0"
.section .note.GNU-stack,"",@progbits
.section .note.gnu.property,"a"
.align 8
.long 1f - 0f
.long 4f - 1f
.long 5
۰:
.string "GNU"
۱:
.align 8
.long 0xc0000002
.long 3f - 2f
۲:
.long 0x3
۳:
.align 8
۴:
مرحله ۴: تولید اطلاعات اشکالزدایی #
یکی دیگر از گزینههای مفید GCC، تولید اطلاعات اشکالزدایی و ذخیره آن در برنامه کامپایل شده است. اگرچه این گزینه برای اشکالزدایی برنامهها بسیار مفید است، اما نباید در نسخه نهایی منتشر شده استفاده شود زیرا باعث بزرگتر شدن برنامه میشود.
gdbبرای تولید اطلاعات اشکالزدایی که میتواند توسط اشکالزدای GNU C استفاده شود ، از سوئیچ زیر -ggdbبه صورت زیر استفاده کنید:
gcc example1.c -o example1 -ggdb
اکنون میتوانیم با استفاده از gdb به اطلاعات اشکالزدایی دسترسی پیدا کنیم:
gdb example1
حالا بیایید در ابتدای برنامه یک نقطه توقف (breakpoint) وارد کنیم:
break main
اکنون میتوانیم اشکالزدایی را با runدستور زیر شروع کنیم:
run
این دستور برنامه را اشکالزدایی کرده و اطلاعات اشکالزدایی تولید شده توسط GCC را نمایش میدهد:
Starting program: /home/didier/example1
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Breakpoint 1, main () at example1.c:3
۳ printf("Welcome to Novinhost Servers\n");
(gdb)
سپس میتوانید با تایپ exitدستور در پوسته gdb از gdb خارج شوید.
نتیجه گیری #
این آموزش به بررسی کامپایلر و نقش مهم GCC در توسعه نرمافزار پرداخت. ما یاد گرفتیم که چگونه GCC را روی اوبونتو ۲۲.۰۴ نصب کنیم، یک برنامه C را کامپایل کنیم، یک لیست اسمبلی ایجاد کنیم و اطلاعات اشکالزدایی را انجام دهیم
