昨夜、私はソースからLinux用のGLFW 3パッケージをビルドしようとして遅く働いていました。 CMakeに不慣れであるためと、GLFWに不慣れであるため、このプロセスには合計で約3時間かかりました。
この投稿が、昨日の苦労からあなたを救うことを願っています!私は短い記事を書くべきだと思いました、そしてうまくいけばあなたの人生の数時間を救います...
#glfw IRCチャンネルの「urraka」、「b6」、「niklas」のおかげで、glfwバージョン3.0.1が動作するようになりました。
Glfw3について、特にCMakeでのセットアップに関するドキュメントがウェブ上にあまりないので、これは簡単なプロセスではないことがわかります(確かに私にとっては専門家ではありません)。
これを質問と回答のセクションに分割するように頼まれたので、それを行ったので、回答の部分は以下になりました。
GLFW3のメンテナーのいずれかがこれを見た場合、彼らへの私のメッセージは、「Windows、Mac OS X、LinuxでのGLFW3のセットアップ」セクションをWebサイトに追加してください! GLFWを使用してプログラムを作成するのは非常に簡単です。オンラインドキュメントは非常に優れており、利用可能なすべてのクラスとモジュールのクイックスキャンであり、すぐに使用できます。 here を特色とするテストプロジェクトの例も非常に優れています。私が見つけた2つの主な問題は、最初にシステムにGLFW3をセットアップする方法と、GLFW3プロジェクトをビルドする方法です。これらの2つのことは、おそらく専門家でない人にとっては十分に明確ではありません。
今日は簡単に見ていた(日付:2014-01-14)GLFWのWebサイトは前回見たときから大きく変更されたように見え、GLFWをコンパイルしてGLFWでプログラムを構築するセクションがありますが、これは新しいと思います。
このインストールでは、KUbuntu 13.04、64ビットを使用していました。
最初のステップは、おそらく link を使用して、www.glfw.orgから最新バージョンをダウンロードすることです(将来のバージョンでも同様の方法で動作すると想定しています)。
次のステップは、アーカイブを抽出し、ターミナルを開くことです。 cd
をglfw-3.X.Xディレクトリに移動してcmake -G "Unix Makefiles"
を実行します。昇格した特権が必要な場合があります。また、ビルド依存関係を最初にインストールする必要があります。これを行うには、Sudo apt-get build-dep glfw
を試してください または Sudo apt-get build-dep glfw3
または 手動で行う、Sudo apt-get install cmake xorg-dev libglu1-mesa-dev
を使用したときと同じように、pthreadライブラリなど、必要な他のライブラリが存在する可能性があります。 (以下のg ++リンカーステージに指定された-lオプションを参照してください。)
これで、make
を入力してからmake install
と入力できます。最初にSudo
を入力する必要があります。
さて、最後の3つのCMakeステージで詳細な出力を取得して、何が構築されたか、どこに配置されたかを伝える必要があります。 (たとえば、/usr/include
で。)
次のステップは、vim( "what ?! vim ?!"と言う)または好みのIDE /テキストエディターを起動することです... vimは使用しませんでした。 KUbuntu 13.04で...とにかく、テストプログラムを here (ページの下部)からダウンロードまたはコピーし、保存して終了します。
g++ -std=c++11 -c main.cpp
を使用してコンパイルします-c ++ 11が 必須 しかしnullptr
を使用したので、それが必要でした... gccをバージョン4.7または今後のバージョン4.8にアップグレードする必要があるかもしれません...その情報は here です。
次に、プログラムを手動で入力したか、「あまりにも賢い」ことを試みたが何かが機能しなかった場合にエラーを修正します。次に、このモンスターを使用してリンクします。 g++ main.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi
ですから、「ビルド依存関係のインストール」の部分で、GL、GLU、X11 Xxf86vm(それが何であれ)Xrandr posix-threadおよびXi(それが何であれ)があることを確認することもできます 開発 ライブラリもインストールされます。グラフィックドライバーも更新するかもしれません。GLFW3にはOpenGLバージョン3以降が必要になると思います。おそらく誰かがそれを確認できますか? dlclose
(@ user2255242のクレジット)への未定義の参照を取得している場合は、リンカーオプション-ldl -lXinerama -lXcursor
を追加して、正しく動作させる必要がある場合があります。
そして、はい、本当に多くの-l
sが必要でした!
うまくいけば、この情報が正しく、すべてがあなたのために機能し、GLFWテストプログラムを書くのを楽しんだことを願っています。また、このガイドが、私がそうであったように苦労していた将来の少数の人々を助けた、または助けてくれることを願っています 今日 昨日!
ちなみに、すべてのタグは、存在しない回答を探しているstackoverflowで検索したものです。 (今まで)あなたが私と同じような立場にあった場合、それらがあなたが検索したものであることを願っています。
-l
オプションを指定してglfwをインストールする場合、それほど多くのBUILD_SHARED_LIBS
sは必要ないことに注意してください。 (このオプションを有効にするには、最初にccmake
を実行します)。
これにより、Sudo make install
は共有ライブラリを/usr/local/lib/libglfw.so
にインストールします。次に、簡単なサンプルファイルをコンパイルできます。
g++ main.cpp -L /usr/local/lib/ -lglfw
次に、プログラムを実行する前に、共有ライブラリの検索パスに/ usr/local/lib /を追加することを忘れないでください。これは以下を使用して実行できます。
export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH}
そして、それを~/.bashrc
に入れることができるので、いつもそれを入力する必要がありません。
Pkg-configファイルには、ライブラリを使用するために必要なすべての必要なコンパイル時およびリンク時のフラグと依存関係が記述されています。
pkg-config --static --libs glfw3
それを見せて
-L/usr/local/lib -lglfw3 -lrt -lXrandr -lXinerama -lXi -lXcursor -lGL -lm -ldl -lXrender -ldrm -lXdamage -lX11-xcb -lxcb-glx -lxcb-dri2 -lxcb-dri3 -lxcb-present -lxcb-sync -lxshmfence -lXxf86vm -lXfixes -lXext -lX11 -lpthread -lxcb -lXau -lXdmcp
これらすべてのライブラリが実際にコンパイルに必要かどうかはわかりませんが、私にとってはうまくいきます...
受け入れられた答えではこれ以上編集できないため、1つのコピーアンドペーストコマンドで要約します(3.2.1を最初の行にある最新バージョンに置き換えます)。
version="3.2.1" && \
wget "https://github.com/glfw/glfw/releases/download/${version}/glfw-${version}.Zip" && \
unzip glfw-${version}.Zip && \
cd glfw-${version} && \
Sudo apt-get install cmake xorg-dev libglu1-mesa-dev && \
Sudo cmake -G "Unix Makefiles" && \
Sudo make && \
Sudo make install
プログラムをコンパイルする場合は、次のコマンドを使用します。
g++ -std=c++11 -c main.cpp && \
g++ main.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi -ldl -lXinerama -lXcursor
Learnopengl.comチュートリアルに従っている場合は、GLADもセットアップする必要があります。そのような場合は、このリンクをクリックしてください
次に、ウェブサイトの右下隅にある「生成」ボタンをクリックして、Zipファイルをダウンロードします。次のコマンドでそれを抽出し、ソースをコンパイルします。
g++ glad/src/glad.c -c -Iglad/include
これで、プログラムをコンパイルするコマンドは次のようになります。
g++ -std=c++11 -c main.cpp -Iglad/include && \
g++ main.o glad.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi -ldl -lXinerama -lXcursor
素晴らしいガイド、ありがとう。ここにほとんどの指示があれば、それはalmost私のために構築されましたが、私は1つのエラーが残っていました。
/usr/bin/ld: //usr/local/lib/libglfw3.a(glx_context.c.o): undefined reference to symbol 'dlclose@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libdl.so.2: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
このエラーを検索した後、コマンドラインに-ldl
を追加する必要がありました。
g++ main.cpp -lglfw3 -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -lGL -lpthread -ldl
次に、「hello GLFW」サンプルアプリをコンパイルしてリンクしました。
私はLinuxにかなり慣れていないので、この追加のライブラリが正確に何をするのか完全にはわかりません...リンクエラーを修正する以外は。ただし、上記の投稿ではcmd行の切り替えが表示されています。
誰かが怠け者になっていて、おそらくそれらすべてのライブラリと-lsに対してシェルを構成する方法を知らないのであれば、pythonスクリプト(python3が必要です。ほとんどのLinuxユーザーが使用できます。)スクリプトを簡単にコンパイルして実行でき、心配することはありません。通常のシステムコールがあり、きれいに配置されています。多分それは役に立つでしょう: ここにあります