2013-08-14 3 views
2

Я пытаюсь создать код из http://www.openglsuperbible.com/example-code/OpenGL компиляции Ошибки Ubuntu

с командой:

$ 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 

Другие намеки? :)

Side Примечание: Я также установил библиотеку 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.

На самом деле я не могу найти ничего хорошего в этом вопросе, книга удобно избегает инструкций по установке.


Временное решение: я узнал, что это единственный исходный файл, который не работает. Удаление его файлов и конфигурация CMakeList.txt кажутся мудрыми, пока кто-то не обнаружит другое решение.

Кроме того, мне пришлось использовать optirun для запуска исполняемых файлов, если другие люди с шмелями/nvidia задаются вопросом, почему их программы не работают.

+0

Вы имели в виду 'cmake -G ...'? – mathk

+0

Да, я прошу прощения, я не c & p :-) – TimothyB17

ответ

0

Возможно, вы связали библиотеки в неправильном порядке; все эти символы :, определенные в libX11.a; вам нужно посмотреть, что представляет собой фактическая ссылка на командную строку, поданную в GCC, и опубликовать ее здесь.

Обновление Теперь это означает, что вы статически пытаетесь связать себя с функцией API, которая недоступна в ваших библиотеках (это необязательное расширение и должно запрашиваться динамически).

+1

Я предполагаю, что, будучи .c, является кодом C. Какой должен быть правильный порядок? – TimothyB17

Смежные вопросы