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 و همچنین فایل‌های شیء (object files) مشخص‌شده در خط فرمان تأمین شود. سپس این ورودی‌ها را پردازش کرده و چنانچه گزینهٔ -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 پیوند (link) داده می‌شود و واسط میان DLL و دنیای بیرون را مدیریت می‌کند. این یک فایل باینری است و می‌توان آن را با دادن گزینهٔ -e به dlltool هنگام ایجاد یا خواندن یک فایل .def تولید کرد.

سومین فایل مورد نیاز برای ساخت DLL، فایل کتابخانه‌ای است که برنامه‌ها برای دسترسی به توابع موجود در DLL با آن پیوند می‌خورند (یک `import library' یا کتابخانهٔ واردات). این فایل را می‌توان با دادن گزینهٔ -l به dlltool هنگام ایجاد یا خواندن یک فایل .def تولید کرد.

اگر گزینهٔ -y مشخص شده باشد، dlltool یک کتابخانهٔ delay-import (واردات با تأخیر) ایجاد می‌کند که می‌تواند به جای کتابخانهٔ واردات معمولی استفاده شود تا به برنامه اجازه دهد تنها زمانی که یک تابعِ واردشده برای نخستین بار فراخوانی می‌شود، به dll پیوند بخورد. فایل اجرایی حاصل باید به کتابخانهٔ ایستا (static) 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 را ببینید..SH "گزینه‌ها (OPTIONS)" گزینه‌های خط فرمان معانی زیر را دارند:

نام یک فایل .def را جهت خوانده شدن و پردازش مشخص می‌کند.
نام یک فایل پایه را جهت خوانده شدن و پردازش مشخص می‌کند. محتویات این فایل به بخش بازآرایی (relocation section) در فایل صادرات تولیدشده توسط dlltool اضافه خواهد شد.
نام فایل صادراتی (export file) که قرار است توسط 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 استفاده نشود نیز کار خواهد کرد. این گزینه تنها یک آرگومان می‌پذیرد، و اگر بیش از یک بار در خط فرمان تکرار شود، موارد بعدی موارد قبلی را بازنویسی خواهند کرد. بنابراین در صورت نیاز به ارسال چندین گزینه به اسمبلر، آن‌ها باید درون گیومه دوتایی قرار گیرند.
نامی را مشخص می‌کند که باید در هنگام استفاده از گزینه -e، در فایل .def به عنوان نام DLL ذخیره شود. اگر این گزینه ارائه نشود، نام فایل داده‌شده به گزینه -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 مشخص می‌کند که هنگام ایجاد فایل‌های صادرات (exports) و کتابخانه توسط dlltool، یک عنصر صفر به ابتدای ".idata4" و ".idata5" اضافه شود. این کار روش قدیمی تولید کتابخانه واردات (import library) متعلق به gnu در "dlltool" را شبیه‌سازی می‌کند. به‌طور پیش‌فرض این گزینه غیرفعال است.
مشخص می‌کند که هنگام ایجاد فایل‌های صادرات و کتابخانه توسط dlltool، بخش ".idata5" حذف شود. این گزینه جهت سازگاری با سیستم‌عامل‌های خاصی در نظر گرفته شده است.
مشخص می‌کند که dlltool باید کتابخانه واردات مشخص‌شده با filename را بازرسی کند و نام DLL(های) مرتبط را در "stdout" گزارش دهد. این کار می‌تواند علاوه بر هر عملیات دیگری که توسط سایر گزینه‌ها و آرگومان‌ها مشخص شده است انجام شود. در صورتی که کتابخانه واردات وجود نداشته باشد یا در اصل یک کتابخانه واردات نباشد، dlltool با خطا متوقف می‌شود. همچنین --identify-strict را ببینید.
رفتار گزینه --identify را اصلاح می‌کند، به‌گونه‌ای که اگر filename با بیش از یک DLL مرتبط باشد، خطایی گزارش می‌شود.
مشخص می‌کند که dlltool باید اشیای درون فایل کتابخانه و فایل صادرات تولیدی خود را طوری علامت‌گذاری کند که از تعامل بین کدهای ARM و Thumb پشتیبانی کنند.
باعث می‌شود dlltool فایل‌های موقت اسمبلی مورد استفاده برای ایجاد فایل صادرات را حفظ کند. اگر این گزینه تکرار شود، dlltool فایل‌های موقت شیء (object) مورد استفاده برای ساخت فایل کتابخانه را نیز حفظ خواهد کرد.
باعث می‌شود dlltool هنگام ایجاد نام فایل‌های موقت اسمبلی و شیء، از prefix استفاده کند. به‌طور پیش‌فرض، پیشوند فایل‌های موقت از روی pid تولید می‌شود.
باعث می‌شود dlltool کارهایی را که انجام می‌دهد شرح دهد.
فهرستی از گزینه‌های خط فرمان را نمایش داده و سپس خارج می‌شود.
شماره نسخه dlltool را نمایش داده و سپس خارج می‌شود.
@file
گزینه‌های خط فرمان را از file می‌خواند. گزینه‌های خوانده‌شده به‌جای گزینه اصلی @file قرار می‌گیرند. اگر file وجود نداشته باشد یا خوانده نشود، با گزینه به‌صورت لفظی برخورد شده و حذف نخواهد شد.

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

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

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

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

2026-08-31 binutils-2.47