Hvad er DEF-filformatet?
.def-filer er forbundet med Windows- og OS/2-udviklingsmiljøer og bruges sammen med C, C++ og andre kompilerede sprog.
Filer med filtypen .def gemmer data i almindeligt tekstformat. .def-filer kaldes undertiden moduldefinitionsfiler og bruges til at generere DLL-biblioteker. En .def-fil gemmer et specielt sæt linker-direktiver - sætninger som LIBRARY, EXPORTS, IMPORTS, SECTIONS, HEAPSIZE og STACKSIZE - der bruges til at definere nøgleaspekter af et DLL-bibliotek, herunder hvilke funktioner og datasymboler der er eksponeret for kaldere, og hvilke ordinalnumre de bærer.
Filen sendes til linkeren på build-tidspunktet ved hjælp af /DEF:navn.def-switchen (MSVC) eller tilsvarende flag i MinGW/GCC og LLVM lld-link. Det er et build-input, ikke en kompileret artefakt; den resulterende binære fil er en .dll eller .exe.
En DLL er en biblioteksfil, der gemmer eksekverbar kode og andre relaterede data. DLL-filer er genanvendelige - de kan tilgås af flere applikationer samtidigt - og indlæses dynamisk efter behov. DLL-filer er også en måde at spare diskplads og arbejdshukommelse på grund af deres dynamiske natur. Opdatering af software er også lettere, fordi DLL-filer deles mellem flere applikationer.
Moderne C/C++-kompilere giver udviklere mulighed for at markere eksporterede symboler direkte i kildekoden ved hjælp af __declspec(dllexport), hvilket i høj grad reducerer behovet for en separat .def-fil. Dog understøttes .def-filer stadig af den nuværende MSVC-linker (link.exe) og LLVM lld-link, og de foretrækkes stadig, når der kræves en stabil, eksplicit ordnet eksporttabel.
Sikkerhed og tryghed
RISIKO: LOWEn moduldefinitions-.def er en lille build-fil i almindelig tekst og er sikker at åbne og læse - den kan ikke eksekveres. Den eneste praktiske risiko er at redigere den i et rigtigt projekt: ændring eller fjernelse af en EXPORTS-indgang ændrer DLL-filens offentlige grænseflade og kan ødelægge kaldere eller ændre eksport-ordinaler, så forstå ABI-konsekvenserne før redigering. Som med enhver kildefil skal du kun stole på .def-filer fra projektkilder, du kontrollerer.
Formatdetaljer
kort fortalt- Tibia / OTClient kortfil (.def) - Nogle spilværktøjer og Tibia-korteditoren brugte .def til kort/spawn-definitioner - ikke relateret til linkere.
- ESRI ArcView / SmartWare datadefinition - Ældre database- og GIS-værktøjer (SmartWare, ArcView, DataFlex) skrev deres egne .def-skema/definitionsfiler.
- AniSprite animationsdefinition / Oberon-2 & Modula-2 DEFINITION-modul - AniSprite gemte sprite-animationsdefinitioner i .def; Modula-2/Oberon bruger .def til et moduls offentlige grænseflade.
Programmer der åbner DEF-filer
Tekniske detaljer
dyb specifikation| Format-type | Linker-direktivfil i almindelig tekst |
| MIME-type | text/plain |
| Tegnkodning | ASCII / ANSI; UTF-8 uden BOM er typisk |
| Filsignatur (magic bytes) | Ingen - identificeres ved nøgleord som LIBRARY, EXPORTS eller NAME i starten af linjer |
| Typisk filstørrelse | Under 1 KB til få KB (ét eksporteret symbol pr. linje) |
| Kernesætning: LIBRARY / NAME | Erklærer modulnavnet indlejret i DLL-filens interne header |
| Kernesætning: EXPORTS | Lister hvert symbol, der skal eksponeres, med valgfrie ordinal- (@N), NONAME- og DATA-flag |
| Yderligere sætninger | IMPORTS, SECTIONS (indstil sektionsattributter), HEAPSIZE, STACKSIZE |
| Linker-switch (MSVC) | /DEF:filnavn.def sendt til link.exe ved build-tid |
| Understøttede toolchains | MSVC link.exe, MinGW/GCC ld, LLVM lld-link, Watcom linker, Digital Mars linker |
| Output-artefakter | Styrer eksporttabellen for en .dll og det importbibliotek (.lib), der genereres sammen med den |
| Tilknyttede operativsystemer | Windows (primær); OS/2 (legacy); 16-bit DOS (legacy) |
| Moderne alternativ | __declspec(dllexport) i kildekoden; .def foretrækkes stadig til stabile eksport-ordinaler og toolchain-portabilitet |
| Legacy 16-bit nøgleord | CODE- og DATA-segmentattributsætninger findes i 16-bit Windows/OS/2 DEF-filer; forældet under Win32 |
| Komprimering og kryptering | Ingen - altid gemt som ukomprimeret, ukrypteret almindelig tekst |
| Udgivet | Windows / OS/2 development, late 1980s-1990s (16-bit, then Win32) |
| Seneste version | Same statement syntax used by the current MSVC linker (link.exe) and LLVM lld-link |
| Specifikation | learn.microsoft.com |
DEF-konverteringer
Fællesskabets Q&A
spurgt af brugereIngen spørgsmål endnu - vær den første til at spørge om DEF-filer.