.dll/.libsの使用方法に関する一般的な質問があります。私は私のプロジェクトに使用される.dllを作成していますが、私がコンパイルするときには、.dllに関連付けられた.libを静的にリンクしてプロジェクトをコンパイルする必要があることに気付きました(そうでなければ、リンクエラー "fatalエラーLNK1107:無効または破損したファイル:0x300で読み取ることができません ")。だから後で私のプロジェクトをredistrobuteして、それを将来更新したら、新しい.exeと新しい.dllを新しい.dllだけでなく出荷する必要がありますか?もしそうなら、.dllを使って気にするのはなぜですか?exeエラーにリンクするライブラリとDLL "0x300で読み込めません"
11
A
答えて
29
.libには、DLLによってエクスポートされる関数などのスタブが含まれています。 .libをEXEにリンクすると、EXEは関数の呼び出し方法を知るようになります。もちろん、そこには機能はありません。コールはどこにも行きません。ロード時に、オペレーティングシステムがEXEを読み込むと、DLLもロードされ、EXEがスタブに呼び出される場所にローダーが置き換えて、DLLの実際の関数に置き換えます。
通常、お客様に.libを出荷する必要はありません。しかし、お客様のDLLを使用する独自のEXEを作成する場合は、.libを送信してEXEとそのDLLをリンクさせる必要があります。
リンカエラーLNK1107は、.libではなくDLLにリンクしようとしたことを意味します。定義上、DLLはビルド時に静的にではなく実行時に動的にリンクされるため、常に間違っています。
関連する問題
- 1. エラー:dllを読み込めませんでした。エラー値193
- 2. dllを読み込めません
- 3. DLL 'mqrt.dll'を読み込めません
- 4. nQSError:93001 - 0xc1のためにライブラリoracore11.dllを読み込めません
- 5. ノードjsエラー:共有ライブラリを読み込めません
- 6. ダイナミックライブラリphp_ldap.dllを読み込めません
- 7. JavaからMATLABでDLLを読み込めません
- 8. PostgreSQLはライブラリ不明のエラーを読み込めませんでした14001
- 9. vim:ライブラリlibpythonを読み込めませんでした
- 10. クローゼットでhttp-kitライブラリを読み込めません
- 11. iOS 9のUIWebViewでHTTPリンクを読み込めません。
- 12. 他のコンピュータからdllを読み込めません
- 13. dllimportがdllを読み込めません
- 14. C#.NETからWin32ネイティブDLLファイルを読み込めません
- 15. DLL「iclit09b.dll」を読み込むことができません
- 16. Android用OpenCV - ライブラリを読み込めません
- 17. アンドロイドスタティック初期化opencv 3.0ライブラリ "opencv_java3"を読み込めません
- 18. 既存のライブラリを読み込めません
- 19. XMLHttpRequestを読み込めません。
- 20. PyBonjourエラー - ライブラリlibdns_sd.so.1を読み込むことができません
- 21. DLL 'sqlite3.dll'を読み込めません:指定されたモジュールがUWP Xamarin.Formsにありません
- 22. Windows 7でVB6 OCXを読み込めませんエラー372
- 23. 間欠 "タイプを読み込めませんでした" System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter '"エラー
- 24. カスタムメンバーシッププロバイダを読み込めませんか?
- 25. app.htmlを読み込めません
- 26. リソースを読み込めません
- 27. 'Microsoft-Windows-AppLocker/EXEとDLL'を読み込むWMIクエリC#
- 28. ビジュアルスタジオはdllのブッチを読み込みません
- 29. ムービーを読み込めません
- 30. jPlayerを読み込めません
私はあなたが提案したものを試しています。私の問題は、私がデバッグモードでビルドしても、libファイルが生成されないということです。 dllファイルのみが生成されます。どのように私はデバッグバージョンでlibファイルを生成することができます。 –
あなたのコメントは、あなたがリリースビルドでlibファイルを取得することを示唆しているようですが、デバッグビルドではありません。そうですか?その場合は、両方のビルドで同じリンカオプションを設定していることを確認してください(もちろん、リリースとデバッグの間で異なる必要があるものは除く)。 –
DLLには、通常、インポートライブラリが自動的に生成されます関数を__declspec(dllexport)属性で使用するか、DEFファイルを使用して明示的に関数をエクスポートする場合に使用します。 __declspec(dllexport)は、#ifndef(_DEBUG)などで囲まれているため、コンパイラによって除外されている可能性があります。 –