2

http://www.openglsuperbible.com/example-code/からコードをセットアップしようとしてい ます

コマンドで:

$ cmake -G "Unix Makefiles" ; make clean ; make all

システムを準備するために、次のパッケージをインストールしました。

xrandr libxrandr x11-xserver-utils libxrandr-dev libglfw2 libglfw-dev xorg-dev libx11-dev libgl-dev libglu-dev libgl1-mesa-dev freeglut3 freeglut3-dev mesa-common-dev freeglut3-dev build-essential libx11-dev libx11-*

このリストにインストールしたパッケージの一部を見逃している可能性があります。申し訳ありません。

次に、リンク フェーズに次のことを追加するために、CMakeList.txt を変更しました。

glfw GL rt glut X11 dl Xrandr Xext GLEW GLU

次に、コンパイルを試みますが、リンク段階で失敗します:

/opt/sb6code/src/xraw/xraw.c: In function ‘CreateWindow’:
/opt/sb6code/src/xraw/xraw.c:106:14: warning: assignment makes pointer from integer without a cast [enabled by default]
Linking C executable bin/xraw
CMakeFiles/xraw.dir/src/xraw/xraw.c.o:xraw.c:function CreateWindow: error: undefined reference to 'XOpenDisplay'
CMakeFiles/xraw.dir/src/xraw/xraw.c.o:xraw.c:function CreateWindow: error: undefined reference to 'XCloseDisplay'
CMakeFiles/xraw.dir/src/xraw/xraw.c.o:xraw.c:function CreateWindow: error: undefined reference to 'XCreateColormap'
CMakeFiles/xraw.dir/src/xraw/xraw.c.o:xraw.c:function CreateWindow: error: undefined reference to 'XCreateWindow'
CMakeFiles/xraw.dir/src/xraw/xraw.c.o:xraw.c:function CreateWindow: error: undefined reference to 'XMapWindow'
CMakeFiles/xraw.dir/src/xraw/xraw.c.o:xraw.c:function CreateWindow: error: undefined reference to 'glXCreateContextAttribsARB'
CMakeFiles/xraw.dir/src/xraw/xraw.c.o:xraw.c:function Cleanup: error: undefined reference to 'XDestroyWindow'
CMakeFiles/xraw.dir/src/xraw/xraw.c.o:xraw.c:function Cleanup: error: undefined reference to 'XCloseDisplay'
CMakeFiles/xraw.dir/src/xraw/xraw.c.o:xraw.c:function main: error: undefined reference to 'XNextEvent'
CMakeFiles/xraw.dir/src/xraw/xraw.c.o:xraw.c:function main: error: undefined reference to 'XGetWindowAttributes'
collect2: error: ld returned 1 exit status
make[2]: *** [bin/xraw] Errore 1
make[1]: *** [CMakeFiles/xraw.dir/all] Errore 2
make: *** [all] Errore 2

今、私はウェブを検索しようとしましたが、SO.comでもソリューションを検索しようとしましたが、すでにリンクフェーズに追加したライブラリをリンクするように言われ続けています..進捗。

私に役立つ知識やヒントはありますか?


わかりました、回答に刺激されて、CMakeFiles ディレクトリに移動し、コンパイルを管理する構成ファイルを探しました。何らかの理由で、更新にもかかわらず、CMakeLists に記載されているフラグの一部が欠落していることがわかりました。

したがって、コンパイル行は次のようになります。

/usr/bin/cc      CMakeFiles/xraw.dir/src/xraw/xraw.c.o  -o bin/xraw  -L/opt/sb6code/lib -rdynamic -lGL -lglut -lGLU -lm -lX11 -ldl -lGLEW -lXrandr -lXext -lrt -lglfw -Wl,-rpath,/opt/sb6code/lib 

エラーは次のように減少しました。

CMakeFiles/xraw.dir/src/xraw/xraw.c.o:xraw.c:function CreateWindow: error: undefined reference to 'glXCreateContextAttribsARB'
collect2: error: ld returned 1 exit status
make[2]: *** [bin/xraw] Errore 1
make[1]: *** [CMakeFiles/xraw.dir/all] Errore 2
make: *** [all] Errore 2

他のヒントは?:)

サイドノート:CUDAライブラリとパスの下にもインストールしました

/usr/lib/nvidia-304/

たまたま持っている

alt_ld.so.conf                libnvidia-ml.so.1
bin/                          libnvidia-ml.so.304.88
ld.so.conf                    libnvidia-opencl.so.1
libcuda.so                    libnvidia-opencl.so.304.88
libcuda.so.1                  libnvidia-tls.so.304.88
libcuda.so.304.88             libnvidia-wfb.so.1
libGL.so                      libnvidia-wfb.so.304.88
libGL.so.1                    libOpenCL.so
libGL.so.304.88               libOpenCL.so.1
libnvcuvid.so                 libOpenCL.so.1.0
libnvcuvid.so.1               libOpenCL.so.1.0.0
libnvcuvid.so.304.88          libXvMCNVIDIA_dynamic.so.1
libnvidia-cfg.so              libXvMCNVIDIA.so
libnvidia-cfg.so.1            libXvMCNVIDIA.so.1
libnvidia-cfg.so.304.88       libXvMCNVIDIA.so.304.88
libnvidia-compiler.so         tls/
libnvidia-compiler.so.1       vdpau/
libnvidia-compiler.so.304.88  xorg/
libnvidia-glcore.so.304.88    XvMCConfig
libnvidia-ml.so  

私のIntelグラフィックカードが本で使用するOpenGl 4.*をサポートしているかどうかわからないので、これを使用したいと思います.nvidiaは4.2をサポートしています.

私は実際にこの問題について良い方法を見つけることができません.Bookは都合よくインストール手順を提供することを避けています.


一時的な解決策: これが機能しない唯一のソース ファイルであることがわかりました。誰かが別の解決策を見つけるまで、そのファイルと CMakeList.txt 構成を削除するのが賢明なようです。

また、bumblebee/nvidia を使用している他のユーザーがなぜ自分のプログラムが動作しないのか疑問に思っている場合に備えて、optirun を使用して実行可能ファイルを実行する必要がありました。

4

1 に答える 1

0

ライブラリを間違った順序でリンクしている可能性があります。これらのシンボルすべて で定義されていlibX11.aます。GCC に供給される実際のリンク コマンド ラインが何であるかを確認し、ここに投稿する必要があります。

今すぐ更新してください。これは、ライブラリで使用できない API 関数に対して静的にリンクしようとしていることを意味します (これはオプションの拡張機能であり、動的にクエリする必要があります)。

于 2013-08-14T14:37:16.370 に答える