GCCGO(1) GNU GCCGO(1)

gccgo - کامپایلر مبتنی بر GCC برای زبان گو

gccgo [-c|-S]
[-g] [-pg] [-Olevel]
[-Idir...] [-Ldir...]
[-o outfile] infile...

تنها پرکاربردترین گزینه‌ها در اینجا فهرست شده‌اند؛ برای سایر موارد ادامهٔ متن را ببینید.

دستور gccgo یک فرانت‌اند برای gcc است و از بسیاری از گزینه‌های مشابه پشتیبانی می‌کند. این راهنما تنها گزینه‌های ویژهٔ gccgo را مستندسازی می‌کند.

دستور gccgo می‌تواند برای کامپایل کد منبع زبان برنامه‌نویسی گو به یک فایل شیء (object file)، پیوند دادن مجموعه‌ای از فایل‌های شیء با یکدیگر، یا انجام هر دو به صورت متوالی استفاده شود.

کد منبع گو به صورت بسته (package) کامپایل می‌شود. یک بسته شامل یک یا چند فایل منبع گو است. تمام فایل‌های موجود در یک بسته باید به صورت یکپارچه با هم کامپایل شوند، که این کار با ارسال تمام فایل‌ها به عنوان آرگومان به gccgo انجام می‌گیرد. هر بار فراخوانی gccgo تنها می‌تواند یک بستهٔ منفرد را کامپایل کند.

یک بستهٔ گو می‌تواند بستهٔ دیگری را "import" کند. بستهٔ واردشده باید از قبل کامپایل شده باشد؛ gccgo داده‌های واردات را مستقیماً از بستهٔ کامپایل‌شده می‌خواند. هنگامی که این بسته بعداً پیوند داده می‌شود، شکل کامپایل‌شدهٔ بسته باید در دستور پیوند گنجانده شود.

برنامه‌های گو به‌طور کلی باید با اطلاعات اشکال‌زدایی کامپایل شوند، و -g1 همان‌طور که در ادامه شرح داده شده گزینهٔ پیش‌فرض است. حذف نمادها (stripping) از یک برنامهٔ گو معمولاً باعث رفتار نادرست یا خرابی آن خواهد شد.

پوشه‌ای را جهت استفاده در هنگام جستجو برای یک بستهٔ وارداتی در زمان کامپایل مشخص می‌کند.
هنگام پیوند دادن، مانند gcc، پوشه‌ای را برای جستجوی کتابخانه‌ها مشخص می‌کند.
مسیر بسته (package path) مورد استفاده را تعیین می‌کند. این گزینه مقداری را که توسط متد PkgPath از شیءهای reflect.Type بازگردانده می‌شود، تنظیم می‌کند. همچنین برای نام نمادهای قابل رؤیت در سطح سراسری استفاده می‌شود. آرگومان این گزینه معمولاً باید رشته‌ای باشد که پس از نصب این بسته برای وارد کردن آن استفاده خواهد شد؛ به عبارت دیگر، یک مسیر پرونده در پوشه‌های مشخص‌شده توسط گزینهٔ -I است.
یک جایگزین برای -fgo-pkgpath است. این آرگومان با نام بسته از فایل منبع ترکیب می‌شود تا مسیر بسته ایجاد شود. اگر از -fgo-pkgpath استفاده شود، -fgo-prefix نادیده گرفته خواهد شد.

زبان گو اجازه می‌دهد تا یک برنامهٔ منفرد شامل بیش از یک بسته با نام یکسان در عبارت "package" در فایل منبع باشد، اگرچه بدیهی است که این دو بسته باید با استفاده از مسیرهای متفاوتی وارد شوند. برای اینکه این قابلیت در gccgo کار کند، باید هنگام کامپایل بسته یکی از گزینه‌های -fgo-pkgpath یا -fgo-prefix مشخص شود.

استفاده از هر یک از گزینه‌های -fgo-pkgpath یا -fgo-prefix رفتار ویژه با بستهٔ "main" را غیرفعال کرده و اجازه می‌دهد این بسته مانند هر بستهٔ دیگری وارد شود.

یک واردات نسبی (relative import)، وارداتی است که با ./ یا ../ آغاز می‌شود. اگر از این گزینه استفاده شود، gccgo هنگام جستجو برای آن، از dir به عنوان پیشوند واردات نسبی استفاده خواهد کرد.
به‌طور پیش‌فرض، gccgo دربارهٔ توابعی که یک یا چند پارامتر بازگشتی دارند اما فاقد عبارت صریح "return" هستند هشدار می‌دهد. این هشدار را می‌توان با استفاده از -fno-require-return-statement غیرفعال کرد.
بررسی‌های صریح برای تقسیم بر صفر اضافه می‌کند. در زبان گو تقسیم (یا باقیمانده) بر صفر موجب بروز پنیک (panic) می‌شود. در سیستم‌های یونیکس این وضعیت در زمان اجرا با گرفتن سیگنال "SIGFPE" شناسایی می‌شود. برخی از پردازنده‌ها، مانند PowerPC، در هنگام تقسیم بر صفر سیگنال SIGFPE تولید نمی‌کنند. همچنین برخی از محیط‌های اجرایی سیگنالی تولید نمی‌کنند که قابل دریافت باشد. در چنین سیستم‌هایی، می‌توان از این گزینه استفاده کرد. یا می‌توان این بررسی‌ها را از طریق -fno-go-check-divide-zero حذف کرد. این گزینه در حال حاضر به‌طور پیش‌فرض فعال است، اما در آینده ممکن است در سیستم‌هایی که به آن نیاز ندارند به‌طور پیش‌فرض غیرفعال شود.
بررسی‌های صریح برای سرریز تقسیم اضافه می‌کند. برای مثال، سرریز تقسیم هنگام محاسبهٔ "INT_MIN / -1" رخ می‌دهد. در زبان گو این مقدار باید سرریز چرخشی داشته باشد (wrap شود) تا "INT_MIN" تولید شود. برخی از پردازنده‌ها، مانند x86، در هنگام سرریز تقسیم یک تله (trap) ایجاد می‌کنند. در چنین سیستم‌هایی، می‌توان از این گزینه استفاده کرد. یا می‌توان این بررسی‌ها را از طریق -fno-go-check-divide-overflow حذف نمود. این گزینه در حال حاضر به‌طور پیش‌فرض فعال است، اما در آینده ممکن است در سیستم‌هایی که به آن نیاز ندارند به‌طور پیش‌فرض غیرفعال شود.
تحلیل گریز (escape analysis) را غیرفعال می‌کند؛ تحلیلی که تلاش می‌کند اشیاء را به جای هیپ (heap) بر روی پشته (stack) تخصیص دهد.
اطلاعات اشکال‌زدایی تحلیل گریز را در خروجی نمایش می‌دهد. مقادیر بزرگ‌تر n اطلاعات بیشتری تولید می‌کنند.
یک مقدار هش برای اشکال‌زدایی تحلیل گریز. n یک رشته باینری است. این گزینه تحلیل گریز را فقط روی توابعی اجرا می‌کند که نام آن‌ها به مقادیری هش می‌شود که با پسوند مشخص‌شدهٔ n همخوانی دارند. این کار می‌تواند برای جستجوی دودویی میان توابع جهت کشف باگ‌های تحلیل گریز استفاده شود.
اطلاعات عیب‌یابی بهینه‌سازی را در خروجی نمایش می‌دهد.
تعاریف ساختار (struct) نام‌گذاری‌شده در سطح بالا در گو را به صورت کد C در پروندهٔ file می‌نویسد. این گزینه هنگام کامپایل بستهٔ runtime استفاده می‌شود.
قوانین ویژه‌ای را برای کامپایل بستهٔ runtime اعمال می‌کند. تخصیص ضمنی حافظه ممنوع است. همچنین برخی از دستورالعمل‌های اضافی کامپایلر پشتیبانی می‌شوند.
یک فایل JSON را مشخص می‌کند که برای نگاشت الگوهای استفاده‌شده با کامنت‌های ویژهٔ "//go:embed" به فایل‌های تعیین‌شده با الگوها به کار می‌رود. فایل JSON باید دارای دو مؤلفه باشد: "Patterns" که هر الگو را به فهرستی از نام پرونده‌ها نگاشت می‌کند، و "Files" که هر نام پرونده را به مسیر کامل آن پرونده نگاشت می‌کند. این گزینه برای استفاده توسط دستور go جهت پیاده‌سازی "//go:embed" در نظر گرفته شده است.
فایلی را مشخص می‌کند که نگاشت‌هایی را برای مسیرهای بستهٔ وارداتی موجود در فایل‌های منبع گو فراهم می‌آورد. این فایل می‌تواند شامل دو دستور باشد: "importpath" برای تغییر نام مسیرهای وارداتی جهت تأمین محلی وابستگی‌ها (vendoring) و "packagefile" برای نگاشت از مسیر بسته به فایل‌های حاوی داده‌های صادراتی (export data). این گزینه برای استفاده توسط دستور go در نظر گرفته شده است.
این گزینهٔ استاندارد gcc است. دلیل اشاره به آن در اینجا این است که به‌طور پیش‌فرض gccgo تولید اطلاعات اشکال‌زدایی را معادل با گزینهٔ استاندارد -g1 فعال می‌کند. علت این است که برنامه‌های گو برای در دسترس داشتن اطلاعات ردگیری پشته (backtrace) به اطلاعات اشکال‌زدایی نیاز دارند. یک گزینهٔ صریح -g0 می‌تواند برای غیرفعال کردن تولید اطلاعات اشکال‌زدایی استفاده شود، که در این صورت برخی از توابع کتابخانه استاندارد، مانند "runtime.Callers"، به درستی عمل نخواهند کرد.

gpl(7), gfdl(7), fsf-funding(7), gcc(1) و مدخل‌های Info برای gccgo و gcc.

حق نشر (c) 2010-2026 بنیاد نرم‌افزار آزاد (Free Software Foundation, Inc.)

اجازه کپی، توزیع و/یا تغییر این سند تحت شرایط «مجوز مستندات آزاد گنو» (GNU Free Documentation License)، نسخه ۱.۳ یا هر نسخه بعدی منتشرشده توسط بنیاد نرم‌افزار آزاد اعطا می‌شود؛ بدون بخش‌های تغییرناپذیر، متون روی جلد (الف) (زیر را ببینید)، و با متون پشت جلد (ب) (زیر را ببینید). نسخه‌ای از این مجوز در صفحه راهنمای gfdl(7) گنجانده شده است.

(الف) متن روی جلد FSF عبارت است از:

A GNU Manual

(ب) متن پشت جلد FSF عبارت است از:

You have freedom to copy and modify this GNU Manual, like GNU
software.  Copies published by the Free Software Foundation raise
funds for GNU development.
2026-08-10 gcc-16