| DLLTOOL(1) | GNU Development Tools | DLLTOOL(1) |
نام (NAME)
avr-dlltool - ایجاد پروندههای لازم برای ساخت و استفاده از DLLها
خلاصه دستور (SYNOPSIS)
dlltool [-d|--input-def def-file-name]
[-b|--base-file base-file-name]
[-e|--output-exp exports-file-name]
[-z|--output-def def-file-name]
[-l|--output-lib library-file-name]
[-y|--output-delaylib library-file-name]
[--export-all-symbols]
[--no-export-all-symbols]
[--exclude-symbols list]
[--no-default-excludes]
[-S|--as path-to-assembler]
[-f|--as-flags options]
[-D|--dllname name]
[-m|--machine machine]
[-a|--add-indirect]
[-U|--add-underscore]
[--add-stdcall-underscore]
[-k|--kill-at]
[-A|--add-stdcall-alias]
[-p|--ext-prefix-alias prefix]
[-x|--no-idata4]
[-c|--no-idata5]
[--use-nul-prefixed-import-tables]
[-I|--identify library-file-name]
[--identify-strict]
[-i|--interwork]
[-n|--nodelete]
[-t|--temp-prefix prefix]
[-v|--verbose]
[-h|--help]
[-V|--version]
[--no-leading-underscore]
[--leading-underscore]
[--deterministic-libraries]
[--non-deterministic-libraries]
[object-file ...]
توضیحات (DESCRIPTION)
دستور dlltool ورودیهای خود را میخواند که میتوانند از طریق گزینههای -d و -b و همچنین پروندههای شیء (object files) مشخصشده در خط فرمان دریافت شوند. سپس این ورودیها را پردازش کرده و در صورتی که گزینه -e مشخص شده باشد یک پرونده صادرات (exports file) ایجاد میکند. اگر گزینه -l مشخص شده باشد یک پرونده کتابخانه ایجاد مینماید و اگر گزینه -z مشخص شده باشد یک پرونده def تولید میکند. هر یک یا تمامی گزینههای -e، -l و -z میتوانند در یک بار اجرای dlltool حضور داشته باشند.
هنگام ساخت یک DLL، علاوه بر کد منبع DLL، وجود سه پرونده دیگر نیز ضروری است. ابزار dlltool میتواند در ایجاد این پروندهها کمک کند.
پرونده نخست یک پرونده .def است که مشخص میکند کدام توابع از DLL صادر میشوند، DLL چه توابعی را وارد میکند و مواردی از این قبیل. این یک پرونده متنی است و میتوان آن را به صورت دستی ایجاد کرد، یا میتوان از dlltool با گزینه -z برای ساخت آن استفاده نمود. در این حالت، dlltool پروندههای شیء مشخصشده در خط فرمان را پویش کرده و توابعی را که به طور ویژه به عنوان صادرشونده علامتگذاری شدهاند جستجو میکند و مدخلهایی برای آنها در پرونده .def تولیدی قرار میدهد.
برای اینکه تابعی به عنوان صادرشونده از یک DLL نشانهگذاری شود، باید یک مدخل -export:<name_of_function> در بخش .drectve پرونده شیء داشته باشد. در زبان C میتوان این کار را با استفاده از عملگر asm() انجام داد:
asm (".section .drectve");
asm (".ascii \"-export:my_func\"");
int my_func (void) { ... }
پرونده دوم مورد نیاز برای ساخت DLL، پرونده صادرات (exports file) است. این پرونده با پروندههای شیء تشکیلدهنده بدنه اصلی DLL پیوند مییابد و رابط میان DLL و دنیای خارج را مدیریت میکند. این یک پرونده باینری است و میتوان آن را با دادن گزینه -e به dlltool هنگام ایجاد یا خواندن پرونده .def تولید کرد.
پرونده سوم مورد نیاز برای ساخت DLL، پرونده کتابخانهای است که برنامهها برای دسترسی به توابع موجود در DLL با آن پیوند میخورند (یک «کتابخانه واردات» یا import library). این پرونده را میتوان با ارائه گزینه -l به dlltool در هنگام ساخت یا خواندن پرونده .def ایجاد کرد.
اگر گزینه -y مشخص شود، dlltool یک کتابخانه واردات با تاخیر (delay-import library) تولید میکند که میتواند به جای کتابخانه واردات معمول استفاده شود تا به برنامه اجازه دهد تنها پس از اولین فراخوانی یک تابع واردشده، پیوند با DLL را برقرار سازد. برنامه اجرایی حاصل باید با کتابخانه ایستا delayimp حاوی __delayLoadHelper2() پیوند داده شود که به نوبه خود LoadLibraryA و GetProcAddress را از kernel32 وارد میکند.
ابزار dlltool پرونده کتابخانه را مستقیماً میسازد، اما پرونده صادرات را با ایجاد پروندههای موقت حاوی دستورات اسمبلی و سپس اسمبل کردن آنها ایجاد میکند. گزینه خط فرمان -S میتواند برای مشخص کردن مسیر اسمبلری که dlltool استفاده خواهد کرد به کار رود و گزینه -f میتواند برای ارسال فلگهای مشخص به آن اسمبلر استفاده شود. گزینه -n میتواند برای جلوگیری از حذف این پروندههای موقت اسمبلی پس از اتمام کار dlltool به کار رود، و در صورتی که -n دو بار مشخص شود، از حذف پروندههای موقت شیء که برای ساخت کتابخانه استفاده شدهاند نیز جلوگیری خواهد کرد.
در اینجا نمونهای از ساخت یک DLL از پرونده منبع dll.c و همچنین ساخت برنامهای (از پرونده شیء به نام program.o) که از آن DLL استفاده میکند آورده شده است:
gcc -c dll.c dlltool -e exports.o -l dll.lib dll.o gcc dll.o exports.o -o dll.dll gcc program.o dll.lib -o program
همچنین میتوان از dlltool برای پرسوجو از یک کتابخانه واردات موجود جهت تعیین نام DLL مرتبط با آن استفاده کرد. توضیحات گزینه -I یا --identify را ببینید.
گزینهها (OPTIONS)
گزینههای خط فرمان دارای معانی زیر هستند:
- -d filename
- --input-def filename
- نام پرونده .def را جهت خواندن و پردازش مشخص میکند.
- -b filename
- --base-file filename
- نام پرونده پایه (base file) را جهت خواندن و پردازش مشخص میکند. محتویات این پرونده به بخش بازآرایی (relocation section) در پرونده صادرات تولیدشده توسط dlltool اضافه خواهد شد.
- -e filename
- --output-exp filename
- نام پرونده صادراتی (exports file) تولیدی توسط dlltool را مشخص میکند.
- -z filename
- --output-def filename
- نام پرونده .def ایجادشده توسط dlltool را تعیین میکند.
- -l filename
- --output-lib filename
- نام پرونده کتابخانهای را که باید توسط dlltool ایجاد شود تعیین میکند.
- -y filename
- --output-delaylib filename
- نام پرونده کتابخانه واردات با تاخیر را که باید توسط dlltool ایجاد شود مشخص میکند.
- --deterministic-libraries
- --non-deterministic-libraries
- هنگام ساخت کتابخانههای خروجی در پاسخ به گزینههای --output-lib یا --output-delaylib، برای مهرهای زمانی، شناسههای کاربری و شناسههای گروهی ایجادشده از مقدار صفر استفاده میکند (--deterministic-libraries) یا مهرهای زمانی و شناسههای کاربری و گروهی واقعی را به کار میگیرد (--non-deterministic-libraries).
- --export-all-symbols
- تمام نمادهای عمومی و ضعیف (weak) تعریفشده در پروندههای شیء ورودی را به عنوان نمادهای صادراتی در نظر میگیرد. فهرست کوچکی از نمادها وجود دارد که به طور پیشفرض صادر نمیشوند؛ گزینه --no-default-excludes را ببینید. میتوانید با استفاده از گزینه --exclude-symbols نمادهایی را به این فهرست استثناها بیفزایید.
- --no-export-all-symbols
- تنها نمادهایی را صادر میکند که به طور صریح در پرونده .def ورودی یا در بخشهای .drectve پروندههای شیء ورودی فهرست شدهاند. این رفتار پیشفرض برنامه است. بخشهای .drectve توسط ویژگیهای dllexport در کد منبع ایجاد میشوند.
- --exclude-symbols list
- نمادهای موجود در list را صادر نمیکند. این فهرست شامل نام نمادهایی است که با کاما یا دونقطه از هم جدا شدهاند. نام نمادها نباید با خط زیر (underscore) شروع شود. این گزینه فقط زمانی معنا دارد که از --export-all-symbols استفاده شده باشد.
- --no-default-excludes
- هنگامی که از --export-all-symbols استفاده میشود، به طور پیشفرض از صدور برخی نمادهای ویژه خودداری میگردد. فهرست کنونی این نمادها شامل DllMain@12، DllEntryPoint@0 و impure_ptr است. با استفاده از گزینه --no-default-excludes میتوانید این نمادهای ویژه را نیز صادر کنید. این گزینه تنها زمانی معتبر است که از --export-all-symbols استفاده شده باشد.
- -S path
- --as path
- مسیر کامل به همراه نام پرونده اسمبلری را که باید برای ایجاد پرونده صادرات استفاده شود مشخص میکند.
- -f options
- --as-flags options
- گزینههای خط فرمان مشخصی را تعیین میکند که هنگام ساخت پرونده صادرات به اسمبلر ارسال خواهند شد. این گزینه حتی اگر گزینه -S استفاده نشود نیز کار میکند. این گزینه تنها یک آرگومان میپذیرد و در صورت تکرار در خط فرمان، مقادیر بعدی جایگزین مقادیر قبلی میشوند؛ بنابراین برای ارسال چند گزینه به اسمبلر، آنها را در گیومه دوتایی محصور کنید.
- -D name
- --dll-name name
- نامی را مشخص میکند که در صورت استفاده از گزینه -e، به عنوان نام DLL در پرونده .def ذخیره میشود. اگر این گزینه مشخص نشود، نام پرونده ارسالشده به گزینه -e به عنوان نام DLL به کار میرود.
- -m machine
- -machine machine
- نوع ماشینی (معماری) را مشخص میکند که پرونده کتابخانه باید برای آن ساخته شود. ابزار dlltool دارای یک مقدار پیشفرض توکار است که به نحوه ساخت آن بستگی دارد، اما این گزینه میتواند آن را تغییر دهد. این ویژگی معمولاً تنها هنگام ایجاد DLL برای پردازنده ARM که محتویات آن با دستورالعملهای Thumb کدگذاری شده کاربرد دارد.
- -a
- --add-indirect
- مشخص میکند که هنگام ساخت پرونده صادرات توسط dlltool، بخشی اضافه شود که به توابع صادرشده اجازه میدهد بدون استفاده از کتابخانه واردات ارجاع داده شوند.
- -U
- --add-underscore
- مشخص میکند که هنگام ساخت پرونده صادرات توسط dlltool، یک خط زیر به ابتدای نام تمامی نمادهای صادرشده اضافه شود.
- --no-leading-underscore
- --leading-underscore
- مشخص میکند که آیا نمادهای استاندارد باید به داشتن پیشوند خط زیر مجبور شوند یا خیر.
- --add-stdcall-underscore
- مشخص میکند که هنگام ساخت پرونده صادرات توسط dlltool، یک خط زیر به ابتدای نام توابع صادرشده stdcall افزوده شود. نام متغیرها و نام توابع غیر stdcall دستنخورده باقی میمانند. این گزینه هنگام ایجاد کتابخانههای واردات سازگار با GNU برای DLLهای ارائهشده توسط شخص ثالث که با ابزارهای MS-Windows ساخته شدهاند سودمند است.
- -k
- --kill-at
- مشخص
میکند که
پسوندهای
@<number> از نام
توابع stdcall که
از DLL وارد
میشوند
حذف شوند.
این گزینه
هنگام
ایجاد
کتابخانه
واردات
برای یک DLL که
توابع stdcall را
بدون پسوند
مرسوم @<number>
صادر
میکند
سودمند است.
این تغییر نام نمادهای ارائهشده توسط کتابخانه واردات را برای برنامههای پیوندیافته با آن تغییر نمیدهد، بلکه صرفاً مدخلهای موجود در جدول واردات (بخش idata.) را تغییر میدهد.
- -A
- --add-stdcall-alias
- مشخص میکند که هنگام ساخت پرونده صادرات توسط dlltool، علاوه بر نمادهای دارای @ <number>، نامهای مستعار برای نمادهای stdcall بدون @ <number> نیز اضافه شوند.
- -p
- --ext-prefix-alias prefix
- باعث میشود dlltool نامهای مستعار خارجی برای تمامی واردات DLL با پیشوند مشخصشده بسازد. این نامهای مستعار هم برای نمادهای خارجی و هم برای نمادهای وارداتی فاقد خط زیر آغازین ایجاد میشوند.
- -x
- --no-idata4
- مشخص میکند که هنگام ساخت پروندههای صادرات و کتابخانه توسط dlltool، بخش ".idata4" حذف شود. این گزینه برای سازگاری با برخی سیستمهای عامل خاص است.
- --use-nul-prefixed-import-tables
- مشخص میکند که هنگام ساخت پروندههای صادرات و کتابخانه توسط dlltool، بخشهای ".idata4" و ".idata5" با یک عنصر صفر پیشوند شوند. این کار نحوه تولید کتابخانههای واردات قدیمی gnu توسط "dlltool" را شبیهسازی میکند. این گزینه به طور پیشفرض غیرفعال است.
- -c
- --no-idata5
- مشخص میکند که هنگام ساخت پروندههای صادرات و کتابخانه توسط dlltool، بخش ".idata5" حذف شود. این گزینه جهت سازگاری با برخی سیستمهای عامل خاص است.
- -I filename
- --identify filename
- مشخص میکند که dlltool کتابخانه واردات مشخصشده توسط filename را بررسی کرده و نام DLL(های) مرتبط را در "stdout" گزارش کند. این عملیات میتواند علاوه بر سایر عملیاتهای تعیینشده توسط سایر گزینهها و آرگومانها اجرا شود. در صورتی که کتابخانه واردات وجود نداشته باشد یا در واقع یک کتابخانه واردات نباشد، dlltool با شکست مواجه میشود. همچنین گزینه --identify-strict را ببینید.
- --identify-strict
- رفتار گزینه --identify را تغییر میدهد، به طوری که اگر filename با بیش از یک DLL مرتبط باشد، خطا گزارش شود.
- -i
- --interwork
- مشخص میکند که dlltool پروندههای شیء موجود در پرونده کتابخانه و پرونده صادرات تولیدی را به عنوان پشتیبانیکننده از تعامل متقابل میان کدهای ARM و Thumb علامتگذاری کند.
- -n
- --nodelete
- باعث میشود dlltool پروندههای موقت اسمبلی مورد استفاده برای ساخت پرونده صادرات را حفظ کند. در صورت تکرار این گزینه، dlltool پروندههای موقت شیء مورد استفاده برای ساخت پرونده کتابخانه را نیز حفظ خواهد کرد.
- -t prefix
- --temp-prefix prefix
- باعث میشود dlltool هنگام ساخت نام پروندههای موقت اسمبلی و شیء از prefix استفاده کند. به طور پیشفرض، پیشوند پروندههای موقت از روی شناسه فرآیند (pid) تولید میشود.
- -v
- --verbose
- باعث میشود dlltool عملیاتی را که انجام میدهد شرح دهد (حالت پرگویی).
- -h
- --help
- فهرستی از گزینههای خط فرمان را نمایش داده و سپس خارج میشود.
- -V
- --version
- شماره نسخه dlltool را نمایش داده و سپس خارج میشود.
- @file
- گزینههای
خط فرمان را
از file
میخواند.
گزینههای
خواندهشده
به جای
گزینه اصلی
@file قرار
میگیرند.
اگر file وجود
نداشته
باشد یا
قابل
خواندن
نباشد، با
گزینه به
صورت لغوی
رفتار شده و
حذف
نمیشود.
گزینهها در file با فاصلههای خالی از هم جدا میشوند. یک نویسه فاصله خالی را میتوان با قرار دادن کل گزینه در گیومه تکی یا دوتایی گنجاند. هر نویسهای (از جمله ممیز وارونه) را میتوان با درج یک ممیز وارونه در ابتدای آن اضافه کرد. خود file ممکن است حاوی گزینههای @file دیگری باشد؛ چنین گزینههایی به صورت بازگشتی پردازش خواهند شد.
همچنین ببینید (SEE ALSO)
صفحات Info برای binutils.
حق نشر (COPYRIGHT)
حق نشر (c) 1991-2026 بنیاد نرمافزارهای آزاد (Free Software Foundation, Inc.)
اجازه رونوشتبرداری، توزیع و/یا تغییر این سند تحت شرایط مجوز اسناد آزاد گنو (GNU Free Documentation License) نسخه 1.3 یا هر نسخه بالاتر منتشرشده توسط بنیاد نرمافزارهای آزاد اعطا میشود؛ بدون بخشهای تغییرناپذیر، بدون متون روی جلد، و بدون متون پشت جلد. نسخهای از این مجوز در بخش موسوم به "GNU Free Documentation License" گنجانده شده است.
| 2026-07-30 | binutils-2.47 |