web-dev-qa-db-ja.com

GLFW 3をビルドしてインストールし、Linuxプロジェクトで使用する方法

GLFW3

昨夜、私はソースからLinux用のGLFW 3パッケージをビルドしようとして遅く働いていました。 CMakeに不慣れであるためと、GLFWに不慣れであるため、このプロセスには合計で約3時間かかりました。

この投稿が、昨日の苦労からあなたを救うことを願っています!私は短い記事を書くべきだと思いました、そしてうまくいけばあなたの人生の数時間を救います...

#glfw IRCチャンネルの「urraka」、「b6」、「niklas」のおかげで、glfwバージョン3.0.1が動作するようになりました。

Glfw3について、特にCMakeでのセットアップに関するドキュメントがウェブ上にあまりないので、これは簡単なプロセスではないことがわかります(確かに私にとっては専門家ではありません)。

これを質問と回答のセクションに分割するように頼まれたので、それを行ったので、回答の部分は以下になりました。

あなたはGLFWのメンテナーですか、それともGLFWチームのメンバーですか?

GLFW3のメンテナーのいずれかがこれを見た場合、彼らへの私のメッセージは、「Windows、Mac OS X、LinuxでのGLFW3のセットアップ」セクションをWebサイトに追加してください! GLFWを使用してプログラムを作成するのは非常に簡単です。オンラインドキュメントは非常に優れており、利用可能なすべてのクラスとモジュールのクイックスキャンであり、すぐに使用できます。 here を特色とするテストプロジェクトの例も非常に優れています。私が見つけた2つの主な問題は、最初にシステムにGLFW3をセットアップする方法と、GLFW3プロジェクトをビルドする方法です。これらの2つのことは、おそらく専門家でない人にとっては十分に明確ではありません。

編集

今日は簡単に見ていた(日付:2014-01-14)GLFWのWebサイトは前回見たときから大きく変更されたように見え、GLFWをコンパイルしてGLFWでプログラムを構築するセクションがありますが、これは新しいと思います。

82
user3728501

ステップ1:CMAKEを使用してシステムにGLFW 3をインストールする

このインストールでは、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で。)

ステップ2:テストプログラムを作成してコンパイルする

次のステップは、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を追加して、正しく動作させる必要がある場合があります。

そして、はい、本当に多くの-lsが必要でした!

ステップ3:終了しました。良い一日を!

うまくいけば、この情報が正しく、すべてがあなたのために機能し、GLFWテストプログラムを書くのを楽しんだことを願っています。また、このガイドが、私がそうであったように苦労していた将来の少数の人々を助けた、または助けてくれることを願っています 今日 昨日!

ちなみに、すべてのタグは、存在しない回答を探しているstackoverflowで検索したものです。 (今まで)あなたが私と同じような立場にあった場合、それらがあなたが検索したものであることを願っています。

114
user3728501

-lオプションを指定してglfwをインストールする場合、それほど多くのBUILD_SHARED_LIBSsは必要ないことに注意してください。 (このオプションを有効にするには、最初に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に入れることができるので、いつもそれを入力する必要がありません。

17
CastleDefender

この方法で解決しました

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  

これらすべてのライブラリが実際にコンパイルに必要かどうかはわかりませんが、私にとってはうまくいきます...

15
Oleh Pomazan

受け入れられた答えではこれ以上編集できないため、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もセットアップする必要があります。そのような場合は、このリンクをクリックしてください

http://glad.dav1d.de/#profile=core&specification=gl&api=gl%3D3.3&api=gles1%3Dnone&api=gles2%3Dnone&api=glsc2%3Dnone&language=c&loader=on

次に、ウェブサイトの右下隅にある「生成」ボタンをクリックして、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行の切り替えが表示されています。

2
user2941878

誰かが怠け者になっていて、おそらくそれらすべてのライブラリと-lsに対してシェルを構成する方法を知らないのであれば、pythonスクリプト(python3が必要です。ほとんどのLinuxユーザーが使用できます。)スクリプトを簡単にコンパイルして実行でき、心配することはありません。通常のシステムコールがあり、きれいに配置されています。多分それは役に立つでしょう: ここにあります

0
mathmaniage