2016-09-02 11 views
1

私はWindows開発には初めてです。私はOS Xで作成したアプリケーションをWindows 10に移植しています。私はVisual Studio 2015 Community Editionを使用しています。私の人生の間、私はWindowsでopengl32とリンクできません

プロジェクトを実行するには、私はGL 4.5をターゲットにしているので、私は理解しているとおり、GLFWとWindowsで理解する必要があります。

私はglfwとglewライブラリを持っています。私もCygwinを使用しているので、libsをusr/local /(bin | lib | include)にインストールして、これらのlibsのOS Xで使用するフォルダ構造を模倣しています。

私が持っている問題は、openglライブラリ自体です。昨日までは、私は私のプロジェクトには、次のVisual Studioの設定でGLFWウィンドウをコンパイルし、初期化を取得する

を管理していた:

プロジェクト - >プロパティ - >

C++ - >全般:

追加はインクルードディレクトリ

リンカー - >一般:

追加のライブラリディレクトリ:

C:\cygwin64\usr\local\lib 
C:\cygwin64\usr\local\bin 

リンカー - >入力:

opengl32.dll 
glew32s.lib 
glfw3.lib 

注意すべき最初の事はということです私はopengl32とリンクしていた.dllではなく、.lib。 Windows SDKをインストールすると、Program Files/Microsoft SDKs/Windows(x86など)にopengl32.libがあることを示す質問や投稿をオンラインで見ました。これは私には当てはまりません。私はWindows 10 SDKを再インストールしただけで、静的でも動的でもないOpenGLライブラリはどこにもインストールしません。

私は、OpenGL dllがWindows/System32から来ているのはかなり確信しています。なぜなら、これはマシン全体で唯一のopengl libがあるからです。

私は、C:\Windows\System32がリンカの追加のライブラリディレクトリセクションにあったと思います。私は一週間前にたくさんの闘いでこれを設定していたので、私は思うように言う。それ以来、私はうまく開発することができました。

私がしたことは、私の仕事をgitブランチにコミットし、別のブランチに切り替えてそのブランチにマージすることでした。マージ後、すべてのVisual Studioリンカ/ C++設定が消去されました。だから私は上に示したように、それらを再現しなければならなかった。

LNK1107 invalid or corrupt file: cannot read at 0x2E0 OpenVRTest C:\Windows\System32\opengl32.dll 

そして、私は明らかに半分のものを、それを含まない場合GLFWで未解決です:

は今何が起こるかは、私がC:\Windows\System32とOPENGL32.DLLを含む場合VSが出してくれるということです。

この機能を再度利用する方法に関するヒントはありますか? それがうまく働いていた...私には意味がありませんし、それがサイドノートとしても、このOPENGL32.DLL

で正常に動作している必要があり、人々は、Windowsをインストールすることを主張する理由は、私はわからないんだけどSDKはgl libの静的バージョンをインストールします。少なくともそれは私のためではありません。

ありがとうございます!

答えて

3

リンカー - >入力:

opengl32.dll 
glew32s.lib 
glfw3.lib 

opengl32.dllが間違っています。 Windows開発では、リンカーは常にとなり、ファイルは.libとなります。静的ライブラリの場合、.libには実際のライブラリバイナリが含まれています。 DLLの場合、対応する.libは、使用するDLLと提供するシンボルについてリンカに通知します。

物事が行われることになっているかのこの特定の選択の主な理由は、Windows開発で、周りに実際のDLLをせずにDLLにリンクすることが可能でなければならないということでした。

また、システムライブラリは常にでも64ビットシステムで…32を接尾しています。

+0

この情報を手に入れましょう。 Windowsには、拡張子 ".lib"の2種類のスタティックライブラリがあります。 1つは静的リンク(これは@SaldaVonSchwartzが探している種類)に使用され、もう1つはダイナミックリンク(プロセスを実行してDLL内のコードを共有する)に使用されるインポートライブラリです。 SaldaVonSchwartz、私の友人、あなたは正しいです。私はVisual Studio 2017をインストールしており、それには4つのSDKバージョンが付属しています。あなたが探している静的ライブラリはありません。ブラ – BoiseBaked

-3

問題は拭いてしまったVSの構成設定の中で、x64プラットフォームの設定対のx86に関連するカップルの事だったということでした。そこで、このプロジェクトでは、System32の32ビットDLLと64ビットのリンクを構築しようとしていました。

そうです。回答の多くは理論的にはWindowsのSDKに付属しているopengl32.lib(静的)の話をなぜ

別の問題があるが、私はどこにもそれを見ていません。私はダイナミックなものにリンクしているだけです。

+0

おもしろい事実:64ビットWindowsであっても、システムライブラリには「... 32」という接尾辞が付いています。そしてWindowsでは、リンカ** always(!)**(例外なし)は '.lib'ファイルを取り込みます。動的にリンクされたライブラリの場合、この「静的な」ライブラリには、リンクするDLLとそのDLLが提供する情報が含まれています。 – datenwolf

+0

Windows開発では、 '.lib'ファイルはシステムディレクトリには存在しませんが、コンパイラ配布の一部です。コンパイラツールチェーンがインストールされているディレクトリ構造のどこかで見つけることができます。 – datenwolf

+0

なぜ私はdownvotedになったのですか? LOL ... 1 - はい問題は、私のVC設定が地獄に行き、64と86の間のアーキテクチャ設定が今同じであったため、私は64のビルドと32のビルディングとリンクしていました。これは答えではありません。まさに私の問題でした。 2 - 静的な内部のdll情報については、それは知ってもいいですが、VSにSysmte32/opengl32.dllとリンクするように指示すると、それが機能し、opengl32.libとリンクするように言えば見つからないすべてのディレクトリを検索し、それも見つけられませんでした。 – SaldaVonSchwartz

関連する問題