リンカーの警告:LNK4070 ~ LNK4099

以下の表では,第 1 列に,警告が検知された時に返される警告番号を一覧表示しています。第 2 列の第 1 行は,メッセージ・テキストを示しています。第 2 列の第 2 行目以降は,メッセージの説明を示しています。

番号 メッセージ・テキストと説明
LNK4070 /OUT:filename directive in .EXP differs from output filename "filename"; ignoring directive

.EXP ファイルが作成された時に NAME または LIBRARY 文に指定したファイル名が,基本設定値または /OUT オプションで指定した出力ファイル名と異なっています。作成された DLL を使用するクライアント・プログラムで,問題が発生します。

LNK4071 cannot be incrementally linked on subsequent links

LINK が 1 つ以上のシンボルに対して複数の定義を発見しましたが,エラーに関係なく出力ファイルを作成するための /FORCE または /FORCE:MULTIPLE が使用されました。LINK は増分状態 (.ILK) ファイルを削除しました。

LNK4072 section count count exceeds max (number); image may not run

出力ファイルのセクション (COFF .EXE または .DLL はセグメントのようなセクションで構成されています) の数が,ローだが処理できる上限数を超えています。

/SUMMARY オプションを指定した DUMPBIN プログラムを使って,実行形式ファイルのセクションの名前を表示することができます。詳細は,「DUMPBIN によるファイルの確認」を参照してください。実行形式ファイルのセクション数を減少させるには,以下のようにします。

  • 不要な data_segcode_seg,または alloc_text プラグマを削除してください。

  • LINK/MERGE オプションを指定して,セクションを結合します。

LNK4073 cannot create map for .ILK file; linking nonincrementally

LINK が増分状態 (.ILK) ファイルを作成するために十分に大きな連続した空間が共有メモリーにありませんでした。LINK は,非増分ビルドを行いました。

LNK4074 unable to load filename; cannot checksum

リンカーがダイナミック・リンク・ライブラリー filename をロードしようとしましたが,できませんでした。filename の関数が実行形式ファイルのチェックサムとして使用されます。以下の 1 つが原因として考えられます。

  • filename が現在のディレクトリまたは PATH 環境変数のディレクトリになかったため,リンカーが filename を見つけることができませんでした。

  • filename に問題がありました。インストールしたディレクトリから filename を再コピーしてください。

LNK4075 ignoring "option1" due to "option2" specification

option2 指定が option1 を上書きします。

LNK4076 invalid incremental status file "filename"; linking nonincrementally

LINK が,増分状態 (.ILK) ファイルに書き込めませんでした。filename が壊れているか,それが増分リンクデータベースではないかのどちらかです。ファイルを削除し,再リンクしてください。

LNK4077 exports file "filename" used; ignoring other export specifications

与えられたエクスポート・ファイル filename は,プログラムのエクスポートを提供しています。/EXPORT オプションで指定されたエクスポート,または .DEF ファイルの EXPORTS 文で指定されたエクスポートは,無視されました。

LNK4078 multiple "section" sections found with different attributes

LINK が同じ名前 section を持つが,属性が異なる 2 つ以上のセクションを発見しました。おそらく,インポート・ライブラリーまたはエクスポート・ファイルが,LINK または LIB の以前のバージョンで作成されたものです。ファイルを再作成し,再リンクしてください。

LNK4079 no write permission for incremental status file "filename"; linking nonincrementally

LINK が増分状態 (.ILK) ファイルに書き込めませんでした。これは,このファイル filename が正しい許可を持っていないためです。

LNK4081 insufficient disk space; linking nonincrementally

LINK が増分状態 (.ILK) ファイルの作成または書き込みを行うために十分な空間がありません。

LNK4082 unable to find entrypoint function in module; cannot checksum

関数 CheckSumMappedFile()IMAGEHLP.DLL にありません。

LNK4083 module "name" does not exist; ignored

並び替えファイルで指定したモジュール name がありません。スペルを確認してください。詳細は,/ORDER リンカー・オプションを参照してください。

LNK4084 total image size size exceeds max (256MB); image may not run

アプリケーションが 256 MB (メガバイト) の上限を超えています。詳細は,Compaq Visual Fortran 知識ベースの Q1019 を参照してください。

LNK4085 more than number comments; skipping exestr

この警告は,リンカー・ツールが OMF オブジェクトを COFF オブジェクトに変換している時に発生します。OMF モジュールに 256 より多い注釈があることを示しています。

LNK4086 entrypoint 'function' is not __stdcall with 12 bytes of arguments; image may not run

DLL に対するエントリ・ポイントは __stdcall でなければなりません。/Gz オプションを指定して関数を再コンパイルするか,関数を定義する時に __stdcall または WINAPI を指定します。

LNK4087 CONSTANT keyword is obsolete; use DATA

モジュール定義ファイルまたはコマンドでエクスポートと一緒に CONSTANT を使用する場合,この警告が発生します。代わりに DATA を使用します。

LNK4088 image being generated due to /FORCE option; image may not run

リンカーがエラーに遭遇しました。通常,実行形式ファイルがエラーのために実行できないため,実行形式ファイルは削除されます。しかしながら,/FORCE オプションを使用した場合,リンカーは実行形式ファイルを削除しません。

LNK4089 all references to "dynamic-link library" discarded by /OPT:REF

リンカーは,ダイナミック・リンク・ライブラリーのエクスポートを参照する全てのパッケージ関数を破棄しました。この結果,ダイナミック・リンク・ライブラリーとそのインポート・ライブラリーが不要になります。

LNK4090 No IFGLUE relocation in module with branch to glue code "name"

オブジェクト・ファイルが不正な再配置情報を含んでいました。オブジェクト・ファイルを再コピーするか,再作成してください。詳細は,「壊れたオブジェクト・ファイル」を参照してください。

LNK4092 shared section "section" contains relocations; image may not run correctly

共有セクション section があれば必ず,重大な問題が発生する可能性を警告するため,リンカーがこの警告を発生させます。複数のプロセス間でデータを共有する 1 つの方法は,セクションに共有 (shared) のマークをつけることです。しかしながら,共有としてセクションをマークすることで,問題が発生することがあります。

LNK4093 Drive/Directory component ignored in "module-definition" statement

モジュール定義 (.DEF) ファイルが不正に文を使用していました。LIBRARY または NAME 文には,ディレクトリやドライブ情報を含むことはできません。

LNK4094 filename is an MS-DOS executable; use EXEHDR to dump it

DUMPBIN は,COFF 書式の実行形式ファイルのみで動作します。MS-DOS 実行形式ファイルには EXEHDR を使用します。EXEHDR は,Visual C++ 1.5 で提供されています。

LNK4095 filename is an NE format executable; use EXEHDR to dump it

DUMPBIN は,COFF 書式の実行形式ファイルのみで動作します。NE 書式の実行形式ファイルには EXEHDR を使用します。EXEHDR は,Visual C++ 1.5 で提供されています。

LNK4096 /BASE value "number" is invalid for Windows 95; image may not run

指定したベース・アドレスが不正です。Windows 95 実行形式ファイルは,0x400000 より大きいベース・アドレスを持たなければなりません。ベース・アドレスについての詳細は,/BASE リンカー・オプションを参照してください。

LNK4097 duplicate name "name" in order file; using last one

オーダー・ファイルが,リンカーが関数をロードする順番を指定します。オーダー・ファイルで,関数が 1 度以上現れると,リンカーはその関数への最後の参照を除いて全てのその関数への参照を無視します。オーダー・ファイルの詳細については,/ORDER リンカー・オプションを参照してください。

LNK4098 defaultlib "library" conflicts with use of other libs; use /NODEFAULTLIB:library

互換性のないライブラリーとリンクしようとしています。

注意:実行時ライブラリーは,異なった型の混在を防ぐための指示文を含んでいます。異なった型または,同じプログラムの実行時ライブラリーのデバッグと非デバッグ・バージョンを使用しようとすると,この警告が発生します。たとえば,実行時ライブラリーのある種類を使用するためにあるファイルをコンパイルし,他の種類を使用するために別のファイルをコンパイルし (たとえば,シングルスレッド対マルチスレッド),それらをリンクしようとした場合,このエラーが発生します。

Fortran と C ライブラリーの型は一致しなければなりません。詳細は,「一貫性のあるライブラリー形式の指定」を参照してください。

リンカーがどのライブラリーを検索しているかを決定するために,/VERBOSE:LIB リンカー・オプションを使用することができます。LNK4098 が表示されている時に,たとえば,シングルスレッドで非デバッグの実行時ライブラリーを使用する実行形式ファイルを作成したい場合,/VERBOSE:LIB オプションを使ってリンカーが検索しているライブラリーを見つけることができます。リンカーは,検索したライブラリーとして LIBC.LIB を表示し,LIBCMT.LIBMSVCRT.LIBLIBCD.LIBLIBCMTD.LIB,または MSVCRTD.LIB を表示しません。ビジュアル開発環境では「Project Setting」ダイアログボックス (「Project」メニューから「Settings」を選択) の「Link」タブをクリックし,「Ignore Libraries」テキストボックスに不正な実行時ライブラリーを入力して,不正な実行時ライブラリーをリンカーに無視させます。別の方法は,無視したい各ライブラリーに対して LINK/NODEFAULTLIB:library オプションを指定します。詳細は,/NODEFAULTLIB リンカー・オプションを参照してください。

以下の表は,自分が使用したい実行時ライブラリーに対して,Visual C++ ライブラリーのどれを無視すべきかを示しています。

使用する実行時ライブラリー 無視するライブラリー
シングルスレッド (libc.lib) libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
マルチスレッド (libcmt.lib) libc.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
DLL を使用するマルチスレッド (msvcrt.lib) libc.lib, libcmt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
デバッグ用シングルスレッド (libcd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcmtd.lib, msvcrtd.lib
デバッグ用マルチスレッド (libcmtd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, msvcrtd.lib
DLL を使用するデバッグ用マルチスレッド (msvcrtd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib

たとえば,この警告が表示されている時に,シングルスレッドで非デバッグの実行時ライブラリーを使用する実行形式ファイルを作成したい場合,リンカーで以下のオプションを指定します。

/NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:libcd.lib
    /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrtd.lib
LNK4099 PDB "filename" was not found with "object/library" or at "path"; linking object as if no debug info

リンカーが .PDB ファイルを見つけられませんでした。オブジェクトとライブラリーがあるディレクトリに .PDB ファイルをコピーしてください。