DLLTOOL(1) GNU Development Tools DLLTOOL(1)

dlltool - ایجاد فایل‌های لازم برای ساخت و استفاده از DLLها

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

دستور dlltool ورودی‌های خود را می‌خواند، که می‌توانند از گزینه‌های -d و -b و همچنین فایل‌های شیء مشخص‌شده در خط فرمان بیایند. سپس این ورودی‌ها را پردازش کرده و اگر گزینهٔ -e مشخص شده باشد، یک فایل صادرات (exports file) ایجاد می‌کند. اگر گزینهٔ -l مشخص شده باشد، یک فایل کتابخانه و اگر گزینهٔ -z مشخص شده باشد، یک فایل def ایجاد می‌کند. هر یک یا همهٔ گزینه‌های -e، -l و -z می‌توانند در یک بار اجرای dlltool وجود داشته باشند.

هنگام ساخت یک DLL، علاوه بر کد منبع DLL، وجود سه فایل دیگر نیز ضروری است. dlltool می‌تواند در ساخت این فایل‌ها کمک کند.

فایل نخست یک فایل .def است که مشخص می‌کند چه توابعی از DLL صادر (export) می‌شوند، DLL چه توابعی را وارد (import) می‌کند، و غیره. این یک فایل متنی است و می‌تواند به‌صورت دستی ایجاد شود، یا می‌توان از 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 دو بار مشخص شود، مانع از حذف فایل‌های شیء موقتی می‌شود که dlltool برای ساخت کتابخانه به کار برده است.

در اینجا مثالی از ساخت یک 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 را ببینید..SH "گزینه‌ها (OPTIONS)" گزینه‌های خط فرمان معانی زیر را دارند:

نام یک فایل .def را جهت خوانده شدن و پردازش مشخص می‌کند.
نام یک فایل پایه (base file) را جهت خوانده شدن و پردازش مشخص می‌کند. محتویات این فایل به بخش تغییر مکان (relocation section) در فایل صادرات تولید شده توسط dlltool اضافه خواهد شد.
نام فایل صادراتی را که قرار است توسط dlltool ایجاد شود، مشخص می‌کند.
نام فایل .def را که قرار است توسط dlltool ایجاد شود، مشخص می‌کند.
نام فایل کتابخانه‌ای را که قرار است توسط dlltool ایجاد شود، مشخص می‌کند.
نام فایل کتابخانهٔ بارگذاری معوق (delay-import library) را که قرار است توسط dlltool ایجاد شود، مشخص می‌کند.
هنگام ایجاد کتابخانه‌های خروجی در پاسخ به گزینه‌های --output-lib یا --output-delaylib، مقدار صفر را برای تمامی برچسب‌های زمانی، شناسه کاربری و شناسه گروه ایجاد شده به کار می‌برد (--deterministic-libraries) یا از برچسب‌های زمانی، شناسه کاربری و شناسه گروه واقعی استفاده می‌کند (--non-deterministic-libraries).
با تمام نمادهای سراسری (global) و ضعیف (weak) تعریف‌شده در فایل‌های شیء ورودی، به عنوان نمادهای صادراتی برخورد می‌کند. فهرست کوچکی از نمادها وجود دارد که به صورت پیش‌فرض صادر نمی‌شوند؛ گزینهٔ --no-default-excludes را ببینید. می‌توانید با استفاده از گزینهٔ --exclude-symbols به فهرست نمادهایی که نباید صادر شوند اضافه کنید.
تنها نمادهایی را صادر می‌کند که صراحتاً در یک فایل .def ورودی یا در بخش‌های .drectve در فایل‌های شیء ورودی فهرست شده باشند. این رفتار پیش‌فرض است. بخش‌های .drectve با ویژگی‌های dllexport در کد منبع ایجاد می‌شوند.
نمادهای موجود در list را صادر نمی‌کند. این یک فهرست از نام‌های نمادها است که با نویسه‌های کاما یا دونقطه از هم جدا شده‌اند. نام‌های نمادها نباید حاوی زیرخط آغازین باشند. این گزینه تنها زمانی معنادار است که --export-all-symbols استفاده شده باشد.
هنگامی که --export-all-symbols استفاده می‌شود، به‌طور پیش‌فرض از صادرات برخی نمادهای خاص جلوگیری می‌کند. فهرست فعلی نمادهایی که از صادرات آن‌ها صرف‌نظر می‌شود عبارت است از DllMain@12، DllEntryPoint@0 و impure_ptr. می‌توانید از گزینهٔ --no-default-excludes برای صادر کردن این نمادهای خاص استفاده کنید. این گزینه تنها زمانی معنادار است که --export-all-symbols استفاده شده باشد.
مسیر، شامل نام فایل، اسمبلری را که قرار است برای ایجاد فایل صادرات استفاده شود، مشخص می‌کند.
هرگونه گزینهٔ خاص خط فرمان را که باید هنگام ساخت فایل صادرات به اسمبلر ارسال شود، مشخص می‌کند. این گزینه حتی اگر از گزینهٔ -S استفاده نشده باشد نیز کار خواهد کرد. این گزینه تنها یک آرگومان می‌پذیرد، و اگر بیش از یک بار در خط فرمان تکرار شود، تکرارهای بعدی جایگزین موارد قبلی خواهند شد. بنابراین اگر ارسال چندین گزینه به اسمبلر ضروری باشد، باید آن‌ها را درون علامت نقل‌قول جفتی (double quotes) قرار داد.
نامی را که باید در فایل .def به عنوان نام DLL در زمان استفاده از گزینهٔ -e ذخیره شود، مشخص می‌کند. اگر این گزینه ارائه نشود، نام فایل داده‌شده به گزینهٔ -e به عنوان نام DLL استفاده خواهد شد.
نوع ماشینی را که فایل کتابخانه باید برای آن ساخته شود، مشخص می‌کند. dlltool بسته به نحوهٔ ساخته شدن آن، دارای یک نوع پیش‌فرض توکار است، اما این گزینه می‌تواند برای بازنویسی آن به کار رود. این معمولاً تنها در زمان ایجاد DLLها برای یک پردازنده ARM کاربرد دارد، زمانی که محتویات DLL در واقع با دستورالعمل‌های Thumb کدگذاری شده باشند.
مشخص می‌کند که هنگام ایجاد فایل صادرات توسط dlltool، باید بخشی اضافه شود که به توابع صادرشده اجازه می‌دهد بدون استفاده از کتابخانهٔ وارداتی مورد ارجاع قرار گیرند. هر معنایی که می‌خواهد داشته باشد!
مشخص می‌کند که هنگام ایجاد فایل صادرات توسط dlltool، باید یک زیرخط به ابتدای نام‌های تمام نمادهای صادرشده اضافه شود.
مشخص می‌کند که آیا افزودن پیشوند به نماد استاندارد اجباری باشد یا خیر.
مشخص می‌کند که هنگام ایجاد فایل صادرات توسط dlltool، باید یک زیرخط به ابتدای نام‌های توابع صادرشدهٔ stdcall افزوده شود. نام متغیرها و نام توابع غیر stdcall دست‌نخورده باقی می‌مانند. این گزینه هنگام ایجاد کتابخانه‌های وارداتی سازگار با GNU برای DLLهای شخص ثالثی که با ابزارهای MS-Windows ساخته شده‌اند، مفید است.
مشخص می‌کند که پسوندهای @<number> باید از نام‌های توابع stdcall که از DLL وارد خواهند شد، حذف شوند. این گزینه هنگام ساخت کتابخانهٔ وارداتی برای DLLای که توابع stdcall را بدون پسوند معمول نام نماد @<number> صادر می‌کند، مفید است.

این گزینه نام‌گذاری نمادهای ارائه‌شده توسط کتابخانهٔ وارداتی را برای برنامه‌های پیوند داده‌شده با آن تغییر نمی‌دهد، بلکه صرفاً مدخل‌های موجود در جدول واردات (یعنی بخش .idata) را تغییر می‌دهد.

مشخص می‌کند که هنگام ایجاد فایل صادرات توسط dlltool، باید علاوه بر نمادهای دارای @ <number>، نام‌های مستعاری نیز برای نمادهای stdcall بدون @ <number> افزوده شود.
باعث می‌شود dlltool نام‌های مستعار خارجی با پیشوند مشخص‌شده برای تمام موارد وارداتی DLL ایجاد کند. این نام‌های مستعار برای هر دو نمادهای خارجی و وارداتی بدون زیرخط آغازین ایجاد می‌شوند.
مشخص می‌کند که هنگام ایجاد فایل‌های صادرات و کتابخانه توسط dlltool، بخش ".idata4" باید حذف شود. این گزینه جهت سازگاری با برخی سیستم‌های عامل خاص است..IP --use-nul-prefixed-import-tables 4 مشخص می‌کند هنگامی که dlltool در حال ایجاد فایل‌های صادرات (exports) و کتابخانه است، یک عنصر صفر را پیشوند ".idata4" و ".idata5" کند. این کار رفتار قدیمی تولید کتابخانه واردات gnu در "dlltool" را شبیه‌سازی می‌کند. به‌طور پیش‌فرض این گزینه غیرفعال است.
مشخص می‌کند هنگامی که dlltool در حال ایجاد فایل‌های صادرات و کتابخانه است، بخش ".idata5" را حذف کند. این کار برای سازگاری با برخی سیستم‌عامل‌های خاص است.
مشخص می‌کند که dlltool باید کتابخانه واردات تعیین‌شده توسط filename را بررسی کرده و نام DLL(های) مرتبط را در "stdout" گزارش دهد. این کار می‌تواند علاوه بر هر عملیات دیگری که توسط سایر گزینه‌ها و آرگومان‌ها مشخص شده است، انجام شود. اگر کتابخانه واردات وجود نداشته باشد یا در واقع یک کتابخانه واردات نباشد، dlltool با شکست مواجه می‌شود. همچنین --identify-strict را ببینید.
رفتار گزینهٔ --identify را تغییر می‌دهد، به‌گونه‌ای که اگر filename با بیش از یک DLL مرتبط باشد، یک خطا گزارش می‌شود.
مشخص می‌کند که dlltool باید اشیاء (objects) موجود در فایل کتابخانه و فایل صادرات تولیدشده را به عنوان پشتیبانی‌کننده از کارکرد متقابل (interworking) بین کدهای ARM و Thumb علامت‌گذاری کند.
باعث می‌شود dlltool فایل‌های اسمبلی موقتی را که برای ایجاد فایل صادرات استفاده کرده است نگه دارد. اگر این گزینه تکرار شود، dlltool فایل‌های شیء موقتی را که برای ایجاد فایل کتابخانه استفاده می‌کند نیز حفظ خواهد کرد.
باعث می‌شود dlltool هنگام ایجاد نام فایل‌های موقت اسمبلی و شیء، از prefix استفاده کند. به‌طور پیش‌فرض، پیشوند فایل‌های موقت بر اساس pid تولید می‌شود.
باعث می‌شود dlltool عملیاتی را که انجام می‌دهد شرح دهد.
فهرستی از گزینه‌های خط فرمان را نمایش داده و سپس خارج می‌شود.
شماره نسخهٔ dlltool را نمایش داده و سپس خارج می‌شود.
@file
گزینه‌های خط فرمان را از file می‌خواند. گزینه‌های خوانده‌شده به جای گزینهٔ اصلی @file درج می‌شوند. اگر file وجود نداشته باشد یا قابل خواندن نباشد، با این گزینه به‌صورت لفظی برخورد شده و حذف نخواهد شد.

گزینه‌ها در file با نویسه‌های فاصله خالی (whitespace) از یکدیگر جدا می‌شوند. یک نویسهٔ فاصله می‌تواند با احاطه کردن کل گزینه در نقل‌قول تکی یا جفتی در آن گنجانده شود. هر نویسه‌ای (از جمله بک‌اسلش) می‌تواند با قرار دادن یک بک‌اسلش در ابتدای آن درج شود. خود file می‌تواند شامل گزینه‌های @file دیگری باشد؛ چنین گزینه‌هایی به‌صورت بازگشتی پردازش خواهند شد.

صفحات Info برای binutils.

Copyright (c) 1991-2026 Free Software Foundation, Inc.

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

2026-08-03 binutils-2.47