私はLinux用にコンパイルすることに慣れているので、この.libのものは私にとって少し奇妙です。 Visual Studioでのプログラムでは、他のライブラリやMicrosoftランタイムの未解決の外部シンボルをランダムに取得し続けます。
1>glfw3.lib(init.c.obj) : error LNK2019: unresolved external symbol __imp__vsnprintf referenced in function __glfwInputError
1>MSVCRTD.lib(vsnprintf.obj) : error LNK2001: unresolved external symbol __imp__vsnprintf
1>glfw3.lib(context.c.obj) : error LNK2019: unresolved external symbol __imp__sscanf referenced in function _parseVersionString
1>MSVCRTD.lib(vsnprintf.obj) : error LNK2001: unresolved external symbol __imp___vsnprintf
1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib\OLDNAMES.lib : warning LNK4272: library machine type 'UNKNOWN' conflicts with target machine type 'X86'
私はこれらのライブラリのみを含めており、それらが見つかっていることを確認できます。
x86/glew32s.lib
x86/glfw3.lib
x86/glfw3dll.lib
opengl32.lib
継承された値を使用して:
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comdlg32.lib
これが正確な順序であることを確認できます。 Windows 7SDKとVisualStudioをインストールして再インストールしようとしました-私もWindows7を使用しています。
この問題に関するサポートをいただければ幸いです。必要に応じて、さらに情報を提供させていただきます。
ありがとう、ボンシー
問題は、glfw静的ライブラリが使用しているものとは異なるバージョンのVisualStudioで構築されていることです。 2015年春の時点で、glfw.orgにあるビルド済みのものは、Visual Studio 2015 RC(使用しているように見えます)と互換性がありません。
幸い、GLFWはパーミッシブライセンスの下でリリースされた小さなコードベースであるため、最も簡単な解決策は、ソリューション内にGLFW用の新しいプロジェクトを作成することです。手順は次のようになります。
include
、_deps/GL
_にコピーし、src
フォルダーを作成します。src
フォルダーにコピーします。 Windowsの場合、これはwin
またはwgl
プレフィックスが付いているか、プレフィックスがないすべてです。あなたはすべてのcmakeのものを無視することができます。glfw_config.h
_、_#defines
_、および__GLFW_WIN32
_の__GLFW_WGL
_を含む__GLFW_USE_OPENGL
_という名前のファイルをsrc
に作成します。ウィンドウ以外のものをサポートしたい場合は、このファイルで必要なオプションを条件付きで定義する必要があります。すべてのオプションは_src/glfw_config.h.in
_で説明されています。_GLFW_USE_CONFIG_H
_を追加します。$(SolutionDir)GLFW\$(Platform)\$(Configuration)\glfw.lib
です。)リンカー入力にライブラリを追加することもできます。つまり、legacy_stdio_definitions.lib
[プロパティ]> [リンカー]> [入力]に移動します。
そして、追加の依存関係に上記のライブラリを追加します。
動的ランタイムライブラリリンクと静的ランタイムライブラリリンクの間に誤接続があるようです。シンボルの「__imp」プレフィックスは、コードがDLLから何かを探していることを意味しますが、リンクしているライブラリはおそらく静的ランタイムライブラリを期待しています。
プロジェクトのプロパティページ([ビルド]-> [プロパティ]の下)を表示し、左側でC++カテゴリを探します。 「コード生成」の下に「ランタイムライブラリ」というエントリがあります。デバッグモードでコンパイルしているように見えるため、これはおそらく現在マルチスレッドデバッグDLL(/ MDd)に設定されています。これをマルチスレッドデバッグ(/ MTd)に変更し、すべてを再コンパイルします。それが機能するかどうかを確認します。