Можно ли собрать FreeGLUT на Mac OS X?

Я делаю несколько учебных пособий по OpenGL, в которых используется FreeGLUT.

Очевидно, вы собираете и устанавливаете его на Mac следующим образом:

CPPFLAGS="-I/usr/X11R6/include" ./configure --prefix="${PWD}/../"
make
make install

К сожалению, это само по себе дает мне ошибку, когда я выполняю команду make: Undefined symbols for architecture x86_64

После небольшой работы я обнаружил, что улучшение в первой строке:

CPPFLAGS="-I/usr/X11R6/include -L/usr/X11R6/lib" LDFLAGS="-L/usr/X11R6/lib" ./configure --prefix="${PWD}/../"

К сожалению, когда я выполняю команду make, я все еще получаю сообщение об ошибке:

gcc -DHAVE_CONFIG_H -I. -I../../..   -I/usr/X11R6/include -L/usr/X11R6/lib -I../../../include  -g -O2 -Wall -pedantic -MT smooth_opengl3-smooth_opengl3.o -MD -MP -MF .deps/smooth_opengl3-smooth_opengl3.Tpo -c -o smooth_opengl3-smooth_opengl3.o `test -f 'smooth_opengl3.c' || echo './'`smooth_opengl3.c
smooth_opengl3.c:101: error: redefinition of typedef ‘PFNGLGENBUFFERSPROC’
/usr/X11R6/include/GL/glext.h:5080: error: previous declaration of ‘PFNGLGENBUFFERSPROC’ was here
smooth_opengl3.c:102: error: redefinition of typedef ‘PFNGLBINDBUFFERPROC’
/usr/X11R6/include/GL/glext.h:5078: error: previous declaration of ‘PFNGLBINDBUFFERPROC’ was here
smooth_opengl3.c:103: error: redefinition of typedef ‘PFNGLBUFFERDATAPROC’
/usr/X11R6/include/GL/glext.h:5082: error: previous declaration of ‘PFNGLBUFFERDATAPROC’ was here
smooth_opengl3.c:104: error: redefinition of typedef ‘PFNGLCREATESHADERPROC’
/usr/X11R6/include/GL/glext.h:5197: error: previous declaration of ‘PFNGLCREATESHADERPROC’ was here
smooth_opengl3.c:105: error: redefinition of typedef ‘PFNGLSHADERSOURCEPROC’
/usr/X11R6/include/GL/glext.h:5222: error: previous declaration of ‘PFNGLSHADERSOURCEPROC’ was here
smooth_opengl3.c:106: error: redefinition of typedef ‘PFNGLCOMPILESHADERPROC’
/usr/X11R6/include/GL/glext.h:5195: error: previous declaration of ‘PFNGLCOMPILESHADERPROC’ was here
smooth_opengl3.c:107: error: redefinition of typedef ‘PFNGLCREATEPROGRAMPROC’
/usr/X11R6/include/GL/glext.h:5196: error: previous declaration of ‘PFNGLCREATEPROGRAMPROC’ was here
smooth_opengl3.c:108: error: redefinition of typedef ‘PFNGLATTACHSHADERPROC’
/usr/X11R6/include/GL/glext.h:5193: error: previous declaration of ‘PFNGLATTACHSHADERPROC’ was here
smooth_opengl3.c:109: error: redefinition of typedef ‘PFNGLLINKPROGRAMPROC’
/usr/X11R6/include/GL/glext.h:5221: error: previous declaration of ‘PFNGLLINKPROGRAMPROC’ was here
smooth_opengl3.c:110: error: redefinition of typedef ‘PFNGLUSEPROGRAMPROC’
/usr/X11R6/include/GL/glext.h:5223: error: previous declaration of ‘PFNGLUSEPROGRAMPROC’ was here
smooth_opengl3.c:111: error: redefinition of typedef ‘PFNGLGETSHADERIVPROC’
/usr/X11R6/include/GL/glext.h:5209: error: previous declaration of ‘PFNGLGETSHADERIVPROC’ was here
smooth_opengl3.c:112: error: redefinition of typedef ‘PFNGLGETSHADERINFOLOGPROC’
/usr/X11R6/include/GL/glext.h:5210: error: previous declaration of ‘PFNGLGETSHADERINFOLOGPROC’ was here
smooth_opengl3.c:113: error: redefinition of typedef ‘PFNGLGETPROGRAMIVPROC’
/usr/X11R6/include/GL/glext.h:5207: error: previous declaration of ‘PFNGLGETPROGRAMIVPROC’ was here
smooth_opengl3.c:114: error: redefinition of typedef ‘PFNGLGETPROGRAMINFOLOGPROC’
/usr/X11R6/include/GL/glext.h:5208: error: previous declaration of ‘PFNGLGETPROGRAMINFOLOGPROC’ was here
smooth_opengl3.c:115: error: redefinition of typedef ‘PFNGLGETATTRIBLOCATIONPROC’
/usr/X11R6/include/GL/glext.h:5206: error: previous declaration of ‘PFNGLGETATTRIBLOCATIONPROC’ was here
smooth_opengl3.c:116: error: redefinition of typedef ‘PFNGLVERTEXATTRIBPOINTERPROC’
/usr/X11R6/include/GL/glext.h:5280: error: previous declaration of ‘PFNGLVERTEXATTRIBPOINTERPROC’ was here
smooth_opengl3.c:117: error: redefinition of typedef ‘PFNGLENABLEVERTEXATTRIBARRAYPROC’
/usr/X11R6/include/GL/glext.h:5202: error: previous declaration of ‘PFNGLENABLEVERTEXATTRIBARRAYPROC’ was here
smooth_opengl3.c:118: error: redefinition of typedef ‘PFNGLGETUNIFORMLOCATIONPROC’
/usr/X11R6/include/GL/glext.h:5212: error: previous declaration of ‘PFNGLGETUNIFORMLOCATIONPROC’ was here
smooth_opengl3.c:119: error: redefinition of typedef ‘PFNGLUNIFORMMATRIX4FVPROC’
/usr/X11R6/include/GL/glext.h:5242: error: previous declaration of ‘PFNGLUNIFORMMATRIX4FVPROC’ was here
make[4]: *** [smooth_opengl3-smooth_opengl3.o] Error 1
make[3]: *** [all-recursive] Error 1
make[2]: *** [all-recursive] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

Это было задокументировано в сети раньше, но решение на самом деле не так уж полезно в этот экземпляр. Я также пытался заменить его на GLUT.framework, который поставляется с OS X, но в примерах используются функции, специфичные для FreeGLUT.


person bjz    schedule 05.02.2012    source источник
comment
Хорошо, у меня есть немного дальше в этом. Использование CPPFLAGS="-I/usr/X11R6/include -L/usr/X11R6/lib" ./configure --prefix="${PWD}/../" избавляет от ошибки «Неопределенные символы». Но теперь я получаю ld: library not found for -lGL \ collect2: ld returned 1 exit status \ make[2]: *** [libglut.la] Error 1 \ make[1]: *** [all-recursive] Error 1 / make: *** [all] Error 2   -  person bjz    schedule 06.02.2012
comment
Возможно, вам также следует проверить с помощью LDFLAGS, требуется -L/usr/X11R6/lib.   -  person ZhangChn    schedule 06.02.2012
comment
О, спасибо. Итак, я использовал CPPFLAGS="-I/usr/X11R6/include -L/usr/X11R6/lib" LDFLAGS="-L/usr/X11R6/lib" ./configure --prefix="${PWD}/../" и избавился от предыдущей ошибки. Теперь я получаю целую кучу ошибок по строкам smooth_opengl3.c:101: error: redefinition of typedef ‘PFNGLGENBUFFERSPROC’\/usr/X11R6/include/GL/glext.h:5080: error: previous declaration of ‘PFNGLGENBUFFERSPROC’ was here   -  person bjz    schedule 06.02.2012
comment
Не могли бы вы обновить свой вопрос соответствующим образом, чтобы я мог начать ответ? На этом сайте не рекомендуются чрезмерные комментарии разговоров.   -  person ZhangChn    schedule 06.02.2012


Ответы (3)


XQuartz 2.7.2 заменен на FreeGLUT (2.8.0) вместо старого MesaGLUT. Поэтому, если у вас OS X версии 10.6.3 или новее, вы можете просто установить XQuartz 2.7.2 или новее. Видеть:

person RD1    schedule 13.08.2012
comment
Для тех, кому интересно, как настроить freeglut в XCode, см. lazyfoo .net/tutorials/OpenGL/01_hello_opengl/mac/xcode/ - person youfu; 22.10.2014

В списке рассылки Xquartz было указано, что freeglut demo неправильно объявлять эти PFN*PROC дважды.

Таким образом, просто закомментировав эти двойные определения из smooth_opengl3.c, бесплатный переизбыток пройдет фазу компиляции. Однако, по моему опыту, он не запускается и выдает какую-то ошибку в отношении GLSL.

Также было предложено использовать фреймворк GLUT на Mac OS X.

person ZhangChn    schedule 06.02.2012
comment
К сожалению, GLUT-фреймворк OSX не поддерживает OpenGL 3.2. - person Angus Forbes; 26.08.2012

У меня работает со следующими параметрами для настройки:

./configure  CFLAGS="-I/usr/X11/include/X11/extensions -L/usr/X11/lib" LIBS="-lXrandr -lXxf86vm -lXi" --with-x --x-includes=/usr/X11/include
person Ometeotl    schedule 12.10.2012