| OSHMEM-WRAPPER-COMPILER(1) | Open MPI | OSHMEM-WRAPPER-COMPILER(1) |
نام (NAME)
oshmem-wrapper-compiler - کامپایلرهای واسط OpenSHMEM (شامل oshcc، oshcxx، oshc++، oshfort، shmemcc، shmemcxx، shmemc++، shmemfort)
خلاصه دستور (SYNOPSIS)
oshcc [--showme | --showme:compile | --showme:link] ...
oshcxx [--showme | --showme:compile | --showme:link] ...
oshc++ [--showme | --showme:compile | --showme:link] ...
oshfort [--showme | --showme:compile | --showme:link] ...
shmemcc [--showme | --showme:compile | --showme:link] ...
shmemcxx [--showme | --showme:compile | --showme:link] ...
shmemc++ [--showme | --showme:compile | --showme:link] ...
shmemfort [--showme | --showme:compile | --showme:link] ...
گزینهها (OPTIONS)
گزینههای زیر برای تمامی کامپایلرهای واسط اعمال میشوند:
- •
- --showme: این
گزینه در
چندین شکل
مختلف
ارائه
میشود
(موارد زیر
را ببینید).
هیچیک از
این اشکال
کامپایلر
زیرین را
فراخوانی
نمیکنند؛
بلکه همگی
اطلاعاتی
درباره
نحوه
فراخوانی
کامپایلر
زیرین در
صورت عدم
استفاده از
--showme ارائه
میدهند.
گزینه پایه
--showme خط
فرمانی را
که برای
کامپایل
برنامه
اجرا میشد
نمایش
میدهد.
نکته:
- --showme:compile: فلگهای کامپایلری را که به کامپایلر زیرین ارسال میشد، نمایش میدهد.
- --showme:link: فلگهای پیونددهندهای را که به کامپایلر زیرین ارسال میشد، نمایش میدهد.
- --showme:command: دستور کامپایلر زیرین را نمایش میدهد (که ممکن است یک یا چند توکن باشد).
- --showme:incdirs: فهرستی از دایرکتوریها (جداشده با فاصله و بدون علامت دیگر) را نمایش میدهد که کامپایلر واسط برای تعیین محل فایلهای هدر مربوطه به کامپایلر زیرین ارسال میکرد.
- --showme:libdirs: فهرستی از دایرکتوریها (جداشده با فاصله) را نمایش میدهد که کامپایلر واسط برای تعیین محل کتابخانههای مربوطه به پیونددهنده زیرین ارسال میکرد.
- --showme:libs: فهرستی از نام کتابخانهها (جداشده با فاصله) را نمایش میدهد که کامپایلر واسط برای پیوند یک برنامه استفاده میکرد. به عنوان مثال: mpi open-pal util.
- --showme:version: شماره نسخه Open MPI را نمایش میدهد.
- --showme:help: پیام راهنمای مختصر نحوه استفاده را نمایش میدهد.
برای سایر گزینههایی که میتوان از طریق oshcc ارسال کرد، صفحه راهنمای کامپایلر زیرین خود را ببینید.
توضیحات (DESCRIPTION)
از نظر مفهومی، نقش این دستورات بسیار ساده است: افزودن شفاف فلگهای مربوطه کامپایلر و پیونددهنده (linker) به خط فرمان کاربر که برای کامپایل / پیوند برنامههای OpenSHMEM ضروری هستند، و سپس فراخوانی کامپایلر زیرین برای اجرای واقعی فرمان.
به همین دلیل، این دستورات مکرراً به عنوان کامپایلرهای «واسط» (wrapper) شناخته میشوند؛ زیرا آنها خودشان مستقیماً برنامهها را کامپایل یا پیوند نمیکنند، بلکه تنها فلگهای خط فرمان را افزوده و کامپایلر بکاند را فراخوانی مینمایند.
پیشزمینه (BACKGROUND)
پروژه Open MPI کامپایلرهای واسط را برای چندین زبان ارائه میدهد:
- oshcc, shmemcc: C
- oshc++, oshcxx, shmemc++, shmemcxx: C++
- oshfort, shmemfort: Fortran
کامپایلرهای واسط برای هر یک از زبانها یکسان هستند؛ آنها میتوانند به جای یکدیگر استفاده شوند. نامهای مختلف صرفاً جهت سازگاری با نسخههای پیشین (backwards compatibility) ارائه شدهاند.
نکات فرترن (FORTRAN NOTES)
کامپایلر واسط فرترن برای OpenSHMEM (oshfort و shmemfort) میتواند برنامههای OpenSHMEM را که از هر کدام/همه بایندرهای Fortran در OpenSHMEM استفاده میکنند، کامپایل و پیوند کند.
با این حال توجه داشته باشید که ممکن است کامپایلر فرترن برای اعمال گویش (dialect) خاصی از Fortran به گزینههای خط فرمان اضافی نیاز داشته باشد. برای مثال، در برخی نسخههای کامپایلر IBM XLF، اگر xlf90 کامپایلر فرترن زیرین باشد، ممکن است برای کامپایل فایلهای منبع فرترن با قالب ثابت، گزینه -qfixed لازم باشد.
در نهایت توجه داشته باشید اگر پشتیبانی از Fortran در لایه OpenSHMEM ساخته نشده باشد، oshfort غیرفعال خواهد بود و در صورت استفاده خطا بازمیگرداند.
نمای کلی (OVERVIEW)
دستورات oshcc و shmemcc واسطهای مفیدی برای کامپایلر زیرین C هستند. ترجمه و ساخت یک برنامه OpenSHMEM نیازمند پیوند دادن به کتابخانههای خاص OpenSHMEM است که ممکن است در یکی از دایرکتوریهای جستجوی استاندارد ld(1) قرار نداشته باشند. همچنین اغلب به گنجاندن فایلهای سرایند (header) نیاز دارد که ممکن است در یک مسیر استاندارد یافت نشوند.
دستورات oshcc و shmemcc آرگومانهای خود را همراه با گزینههای -I، -L و -l که مورد نیاز برنامههای OpenSHMEM هستند به کامپایلر زیرین C ارسال میکنند.
همین موضوع برای تمام کامپایلرهای واسط زبانهای دیگر نیز صادق است.
تیم OpenSHMEM اکیداً استفاده از کامپایلرهای واسط را به جای تلاش برای پیوند دستی کتابخانههای OpenSHMEM توصیه میکند. این امر به پیادهسازی خاص OpenSHMEM اجازه میدهد بدون اجبار به تغییر دستورالعملهای پیونددهنده در Makefile کاربران، تغییر کند. در واقع، مجموعه مشخصی از فلگها و کتابخانههای مورد استفاده توسط کامپایلرهای واسط به نحوه پیکربندی و ساخت OpenSHMEM بستگی دارد؛ این مقادیر میتوانند بین نصبهای مختلف از همان نسخه OpenSHMEM تغییر کنند.
در واقع از آنجا که این واسطها صرفاً پوستههای نازکی روی یک کامپایلر زیرین هستند، دلایل بسیار بسیار اندکی برای عدم استفاده از oshcc وجود دارد. هنگامی که استفاده مستقیم از واسطها ممکن نیست، باید از گزینههای --showme:compile و --showme:link برای تشخیص فلگهایی که واسطها استفاده میکردند استفاده شود. برای مثال:
shell$ cc -c file1.c `shmemcc --showme:compile` shell$ cc -c file2.c `shmemcc --showme:compile` shell$ cc file1.o file2.o `shmemcc --showme:link` -o my_oshmem_program
نکات (NOTES)
امکان دارد کامپایلرهای واسط را سازگار با چند معماری (multi-lib aware) کرد. بدین معنا که کتابخانهها و فایلهای هدر مشخصشده ممکن است بر اساس فلگهای کامپایلر تعیینشده متفاوت باشند (برای مثال، با کامپایلرهای GNU در لینوکس، در صورت مشاهده -m32 در مقایسه با -m64 ممکن است مسیر کتابخانه متفاوتی استفاده شود). این رفتار پیشفرض در ساخت استاندارد نیست، اما میتواند فعال شود (برای مثال، در یک بسته دودویی که هم پشتیبانی ۳۲ بیتی و هم ۶۴ بیتی ارائه میدهد). اطلاعات بیشتر را میتوانید در اینجا بیابید.
فایلها (FILES)
رشتههایی که کامپایلرهای واسط پیش از فراخوانی کامپایلر زیرین در خط فرمان درج میکنند، در یک فایل متنی ذخیره میشوند که توسط OpenSHMEM ایجاد شده و در مسیر $pkgdata/NAME-wrapper-data.txt نصب گردیده است، که در آن:
- $pkgdata معمولاً برابر با $prefix/share/openmpi است.
- $prefix دایرکتوری اصلی نصب OpenSHMEM است.
- NAME نام کامپایلر واسط است (به عنوان مثال، $pkgdata/shmemcc-wrapper-data.txt).
ویرایش این فایلها به ندرت لازم است، اما میتوان آنها را بررسی کرد تا مشخص شود واسطها چه فلگهایی را در خط فرمان قرار میدهند.
متغیرهای محیطی (ENVIRONMENT VARIABLES)
بهطور پیشفرض، واسطها از کامپایلرهایی استفاده میکنند که هنگام پیکربندی OpenSHMEM انتخاب شدهاند. این کامپایلرها یا به صورت خودکار توسط اسکریپت «configure» مربوط به Open MPI پیدا شدهاند، یا پیش از اجرای configure توسط کاربر در متغیرهای محیطی CC، CXX و/یا FC انتخاب شدهاند. علاوه بر این، آرگومانهای خاص دیگری برای کامپایلر ممکن است توسط اسکریپت پیکربندی انتخاب شده باشند.
این مقادیر را میتوان با ویرایش فایلهای متنی حاوی اطلاعات پیکربندی (بخش فایلها (FILES) را ببینید)، یا با تنظیم متغیرهای محیطی خاص به شکل oshmem_value به صورت گزینشی بازنویسی (override) کرد.
نامهای معتبر برای مقادیر عبارتند از:
- CPPFLAGS: فلگهای اضافهشده هنگام فراخوانی پیشپردازنده (C یا C++)
- LDFLAGS: فلگهای اضافهشده هنگام فراخوانی پیونددهنده (C، C++ یا Fortran)
- LIBS: کتابخانههای اضافهشده هنگام فراخوانی پیونددهنده (C، C++ یا Fortran)
- CC: کامپایلر C
- CFLAGS: فلگهای کامپایلر C
- CXX: کامپایلر C++
- CXXFLAGS: فلگهای کامپایلر C++
- FC: کامپایلر Fortran
- FCFLAGS: فلگهای کامپایلر Fortran
حق نشر (COPYRIGHT)
2003-2026, The Open MPI Community
| February 23, 2026 |