DEF ファイル形式とは?
.def ファイルは Windows および OS/2 の開発環境に関連付けられており、C、C++、およびその他のコンパイル言語と共に使用されます。
.def 拡張子を持つファイルは、プレーンテキスト形式でデータを保存します。.def ファイルはモジュール定義ファイルと呼ばれることもあり、DLL ライブラリの生成に使用されます。.def ファイルには、リンカー指示の特別なセット(LIBRARY、EXPORTS、IMPORTS、SECTIONS、HEAPSIZE、STACKSIZE などのステートメント)が格納されており、これらを使用して、呼び出し元に公開される関数やデータシンボル、およびそれらが持つ序数(オーディナル番号)を含む DLL ライブラリの主要な側面を定義します。
このファイルは、ビルド時に /DEF:name.def スイッチ(MSVC)または MinGW/GCC や LLVM lld-link の同等のフラグを使用してリンカーに渡されます。これはビルド入力であり、コンパイルされた成果物ではありません。結果として生成されるバイナリは .dll または .exe です。
DLL は、実行可能コードとその他の関連データを格納するライブラリファイルです。DLL ファイルは再利用可能であり、複数のアプリケーションから同時にアクセスでき、必要に応じて動的にロードされます。また、DLL ファイルはその動的な性質により、ディスク容量と動作メモリを節約する手段でもあります。DLL ファイルが複数のアプリケーション間で共有されるため、ソフトウェアの更新も容易になります。
現代の C/C++ コンパイラでは、開発者が __declspec(dllexport) を使用してソースコード内でエクスポートシンボルを直接マークできるため、個別の .def ファイルの必要性は大幅に減少しました。しかし、.def ファイルは現在の MSVC リンカー(link.exe)や LLVM lld-link でも引き続きサポートされており、安定した、明示的に順序付けられたエクスポートテーブルが必要な場合には依然として好まれます。
セキュリティと安全性
リスク: LOWモジュール定義 .def は小さなプレーンテキストのビルドファイルであり、開いて読む分には安全です。実行することはできません。唯一の実質的なリスクは、実際のプロジェクトで編集することです。EXPORTS エントリを変更または削除すると、DLL のパブリックインターフェイスが変更され、呼び出し元が壊れたりエクスポート序数が変わったりする可能性があるため、編集前に ABI への影響を理解してください。他のソースファイルと同様に、自分が管理しているプロジェクトソースの .def ファイルのみを信頼してください。
形式の詳細
概要- Tibia / OTClient マップファイル (.def) - 一部のゲームツールや Tibia マップエディタは、マップ/スポーン定義に .def を使用していましたが、リンカーとは無関係です。
- ESRI ArcView / SmartWare データ定義 - 古いデータベースおよび GIS ツール(SmartWare、ArcView、DataFlex)は、独自の .def スキーマ/定義ファイルを書き出していました。
- AniSprite アニメーション定義 / Oberon-2 & Modula-2 DEFINITION モジュール - AniSprite はスプライトアニメーション定義を .def に保存していました。Modula-2/Oberon はモジュールのパブリックインターフェイスに .def を使用します。
DEF ファイルを開くプログラム
技術的詳細
詳細仕様| フォーマットタイプ | プレーンテキスト・リンカー指示ファイル |
| MIME タイプ | text/plain |
| 文字エンコーディング | ASCII / ANSI; BOM なしの UTF-8 が一般的 |
| ファイルシグネチャ (マジックバイト) | なし - 行の先頭にある LIBRARY、EXPORTS、NAME などのキーワードによって識別されます |
| 一般的なファイルサイズ | 1 KB 未満から数 KB(1 行につき 1 つのエクスポートシンボル) |
| 主要なステートメント: LIBRARY / NAME | DLL の内部ヘッダーに埋め込まれるモジュール名を宣言します |
| 主要なステートメント: EXPORTS | 公開する各シンボルをリストし、オプションで序数 (@N)、NONAME、および DATA フラグを指定します |
| 追加のステートメント | IMPORTS、SECTIONS(セクション属性の設定)、HEAPSIZE、STACKSIZE |
| リンカースイッチ (MSVC) | ビルド時に link.exe に渡される /DEF:filename.def |
| サポートされているツールチェーン | MSVC link.exe, MinGW/GCC ld, LLVM lld-link, Watcom linker, Digital Mars linker |
| 出力成果物 | .dll のエクスポートテーブルと、それと共に生成されるインポートライブラリ (.lib) を制御します |
| 関連するオペレーティングシステム | Windows(主要)、OS/2(レガシー)、16ビット DOS(レガシー) |
| 現代の代替手段 | ソースコード内の __declspec(dllexport)。ただし、安定したエクスポート序数やツールチェーンの移植性のために依然として .def が好まれます |
| レガシー 16ビット キーワード | 16ビット Windows/OS/2 の DEF ファイルに存在する CODE および DATA セグメント属性ステートメント。Win32 では廃止 |
| 圧縮と暗号化 | なし - 常に非圧縮、非暗号化のプレーンテキストとして保存されます |
| リリース日 | Windows / OS/2 development, late 1980s-1990s (16-bit, then Win32) |
| 最新バージョン | Same statement syntax used by the current MSVC linker (link.exe) and LLVM lld-link |
| 仕様書 | learn.microsoft.com |
DEF の変換
コミュニティ Q&A
ユーザーからの質問まだ質問はありません。DEF ファイルについて最初の質問をしてみましょう。