OSHMEM-WRAPPER-COMPILER(1) Open MPI OSHMEM-WRAPPER-COMPILER(1)

oshmem-wrapper-compiler - کامپایلرهای واسط OpenSHMEM (شامل oshcc، oshcxx، oshc++، oshfort، shmemcc، shmemcxx، shmemc++، shmemfort)

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] ...

گزینه‌های زیر برای تمامی کامپایلرهای واسط اعمال می‌شوند:

•
--showme: این گزینه در چندین شکل مختلف ارائه می‌شود (موارد زیر را ببینید). هیچ‌یک از این اشکال کامپایلر زیرین را فراخوانی نمی‌کنند؛ بلکه همگی اطلاعاتی درباره نحوه فراخوانی کامپایلر زیرین در صورت عدم استفاده از --showme ارائه می‌دهند. گزینه پایه --showme خط فرمانی را که برای کامپایل برنامه اجرا می‌شد نمایش می‌دهد.

نکته:

اگر یک آرگومان غیر از نام فایل در خط فرمان ارسال شود، گزینه --showme هیچ فلگ اضافی نمایش نخواهد داد. برای مثال، هر دو دستور oshcc --showme و oshcc --showme my_source.c تمامی فلگ‌های ارائه‌شده توسط واسط را نمایش می‌دهند؛ اما oshcc --showme -v تنها نام کامپایلر زیرین و -v را نمایش می‌دهد.
  • --showme:compile: فلگ‌های کامپایلری را که به کامپایلر زیرین ارسال می‌شد، نمایش می‌دهد.
  • --showme:link: فلگ‌های پیونددهنده‌ای را که به کامپایلر زیرین ارسال می‌شد، نمایش می‌دهد.
  • --showme:command: دستور کامپایلر زیرین را نمایش می‌دهد (که ممکن است یک یا چند توکن باشد).
  • --showme:incdirs: فهرستی از دایرکتوری‌ها (جداشده با فاصله و بدون علامت دیگر) را نمایش می‌دهد که کامپایلر واسط برای تعیین محل فایل‌های هدر مربوطه به کامپایلر زیرین ارسال می‌کرد.
  • --showme:libdirs: فهرستی از دایرکتوری‌ها (جداشده با فاصله) را نمایش می‌دهد که کامپایلر واسط برای تعیین محل کتابخانه‌های مربوطه به پیونددهنده زیرین ارسال می‌کرد.
  • --showme:libs: فهرستی از نام کتابخانه‌ها (جداشده با فاصله) را نمایش می‌دهد که کامپایلر واسط برای پیوند یک برنامه استفاده می‌کرد. به عنوان مثال: mpi open-pal util.
  • --showme:version: شماره نسخه Open MPI را نمایش می‌دهد.
  • --showme:help: پیام راهنمای مختصر نحوه استفاده را نمایش می‌دهد.

برای سایر گزینه‌هایی که می‌توان از طریق oshcc ارسال کرد، صفحه راهنمای کامپایلر زیرین خود را ببینید.

از نظر مفهومی، نقش این دستورات بسیار ساده است: افزودن شفاف فلگ‌های مربوطه کامپایلر و پیونددهنده (linker) به خط فرمان کاربر که برای کامپایل / پیوند برنامه‌های OpenSHMEM ضروری هستند، و سپس فراخوانی کامپایلر زیرین برای اجرای واقعی فرمان.

به همین دلیل، این دستورات مکرراً به عنوان کامپایلرهای «واسط» (wrapper) شناخته می‌شوند؛ زیرا آن‌ها خودشان مستقیماً برنامه‌ها را کامپایل یا پیوند نمی‌کنند، بلکه تنها فلگ‌های خط فرمان را افزوده و کامپایلر بک‌اند را فراخوانی می‌نمایند.

پروژه Open MPI کامپایلرهای واسط را برای چندین زبان ارائه می‌دهد:

  • oshcc, shmemcc: C
  • oshc++, oshcxx, shmemc++, shmemcxx: C++
  • oshfort, shmemfort: Fortran

کامپایلرهای واسط برای هر یک از زبان‌ها یکسان هستند؛ آن‌ها می‌توانند به جای یکدیگر استفاده شوند. نام‌های مختلف صرفاً جهت سازگاری با نسخه‌های پیشین (backwards compatibility) ارائه شده‌اند.

کامپایلر واسط فرترن برای OpenSHMEM (oshfort و shmemfort) می‌تواند برنامه‌های OpenSHMEM را که از هر کدام/همه بایندرهای Fortran در OpenSHMEM استفاده می‌کنند، کامپایل و پیوند کند.

با این حال توجه داشته باشید که ممکن است کامپایلر فرترن برای اعمال گویش (dialect) خاصی از Fortran به گزینه‌های خط فرمان اضافی نیاز داشته باشد. برای مثال، در برخی نسخه‌های کامپایلر IBM XLF، اگر xlf90 کامپایلر فرترن زیرین باشد، ممکن است برای کامپایل فایل‌های منبع فرترن با قالب ثابت، گزینه -qfixed لازم باشد.

در نهایت توجه داشته باشید اگر پشتیبانی از Fortran در لایه OpenSHMEM ساخته نشده باشد، oshfort غیرفعال خواهد بود و در صورت استفاده خطا بازمی‌گرداند.

دستورات 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

امکان دارد کامپایلرهای واسط را سازگار با چند معماری (multi-lib aware) کرد. بدین معنا که کتابخانه‌ها و فایل‌های هدر مشخص‌شده ممکن است بر اساس فلگ‌های کامپایلر تعیین‌شده متفاوت باشند (برای مثال، با کامپایلرهای GNU در لینوکس، در صورت مشاهده -m32 در مقایسه با -m64 ممکن است مسیر کتابخانه متفاوتی استفاده شود). این رفتار پیش‌فرض در ساخت استاندارد نیست، اما می‌تواند فعال شود (برای مثال، در یک بسته دودویی که هم پشتیبانی ۳۲ بیتی و هم ۶۴ بیتی ارائه می‌دهد). اطلاعات بیشتر را می‌توانید در اینجا بیابید.

رشته‌هایی که کامپایلرهای واسط پیش از فراخوانی کامپایلر زیرین در خط فرمان درج می‌کنند، در یک فایل متنی ذخیره می‌شوند که توسط OpenSHMEM ایجاد شده و در مسیر $pkgdata/NAME-wrapper-data.txt نصب گردیده است، که در آن:

  • $pkgdata معمولاً برابر با $prefix/share/openmpi است.
  • $prefix دایرکتوری اصلی نصب OpenSHMEM است.
  • NAME نام کامپایلر واسط است (به عنوان مثال، $pkgdata/shmemcc-wrapper-data.txt).

ویرایش این فایل‌ها به ندرت لازم است، اما می‌توان آن‌ها را بررسی کرد تا مشخص شود واسط‌ها چه فلگ‌هایی را در خط فرمان قرار می‌دهند.

به‌طور پیش‌فرض، واسط‌ها از کامپایلرهایی استفاده می‌کنند که هنگام پیکربندی 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

2003-2026, The Open MPI Community

February 23, 2026