2017-07-31 5 views
1

このトピックに関して複数の投稿を読みましたが、静的にリンクされたexeをビルドすることはできませんでした。Visual StudioスタンドアロンExeの静的リンク

私は、次のしている私の リリース設定(x64)の中

Configuration Properties -> General : Use of MFC - Use MFC in a Static Library

Configuration Properties -> C/C++ -> Code Generation : Runtime Library - Multi-threaded (/MT)

Configuration Properties -> Linker -> Command Line : Additional Options - I have all the required Windows libs "kernel32.lib", etc. (as use of MFC removed them from the "All Options" window above)

Configuration Properties -> Manifest Tool -> Input and Output : Embed Manifest - No

Configuration Properties -> Linker -> Inputであること私のプロジェクトで使用しているlibファイルは5つあります。たとえば、glfw3.lib、完全最適化(/ Ox)を使用しています。

は、プロジェクトを構築し、自分自身をexeファイル実行した後、私はエラーが表示さ「glfw3.dllが見つからなかったため、コードの実行を続行することはできません...」など

私はそれが必要であることがわかりますdependencywalkerを使用しますlibsに関連するdllは、もちろん見つからない。

これを行う方法を誤解していますか、それとも間違っている可能性がありますか?

答えて

0

はい、あなたが若干の誤解を持って表示されます(私は、Visual Studio 2017を使用しています)。

何かがDLLとして提供されている場合、それはDLLとして使用されます。 DLLを実行可能ファイルに組み込むには、いくつかの方法がありますが、それはハックです。それは、物事はどのように動作するはずではありません。

リンク先のlibファイルは、リンクできる関数を提供するために存在し、動的ロードされたDLLの対応する関数に委任するだけです。 DLLがなければ、DLLの各エントリポイントを自分で見つけなければなりません。これは完全に実行可能ですが、少し面倒です。

静的にリンク可能なライブラリとしてパッケージ化されているglfw3のバージョンを見つけるか(存在するかどうかはわかりません)、またはあなたの.exeをglfw3.dllと一緒に出荷する必要がある。

+0

使用しているサードパーティライブラリが静的にリンク可能であるかどうかはどのように分かりますか。動的にlibファイルとdllを使用すると、静的なものはどうなりますか? – Alexander

+1

一般に、この情報はライブラリのベンダーによって提供される必要があります。しかし、経験則として、2つの.libファイル(1つは小さい、もう1つは大きい)、大きなものは静的リンクのためのものです。 .libファイルが1つしかなく、.dllファイルよりもはるかに小さい場合は、動的リンク用です。 –

関連する問題