MacOS 10.6上Qt/OpenGL/GPU应用程序的编译问题

MacOS 10.6上Qt/OpenGL/GPU应用程序的编译问题,qt,opengl,makefile,opencl,osx-snow-leopard,Qt,Opengl,Makefile,Opencl,Osx Snow Leopard,我尝试在MacOS 10.6.8上编译一个已经在Linux/Debian 7.0上运行的应用程序。这段代码使用Qt框架和GPU/OPenCL以及OpenGL库 但是我在编译这个文件头(GLWidget.hpp)时遇到了问题(我在这里输入了原始的Linux版本): 实际上,glClampColor函数未在作用域中声明。因此,我搜索了此函数的dclar位置,并在以下文件中找到了它: /Developer/GPU Computing/C/common/inc/GL/glew.h 然后,我将其添加到路

我尝试在MacOS 10.6.8上编译一个已经在Linux/Debian 7.0上运行的应用程序。这段代码使用Qt框架和GPU/OPenCL以及OpenGL库

但是我在编译这个文件头(GLWidget.hpp)时遇到了问题(我在这里输入了原始的Linux版本):

实际上,
glClampColor
函数未在作用域中声明。因此,我搜索了此函数的dclar位置,并在以下文件中找到了它:

/Developer/GPU Computing/C/common/inc/GL/glew.h
然后,我将其添加到路径中,并将其包含在GLWidget.hpp中:

#ifndef GLWIDGET_H
#define GLWIDGET_H

#include <QGLWidget>
#include <GL/glew.h>
#include <QTimer>
#include "NBody.hpp"
#include "Timer.h"

 class GLWidget : public QGLWidget
 {
     Q_OBJECT

 public:

     GLWidget(QWidget *parent = NULL);

     ~GLWidget();
我不知道该怎么办,我的Makefile是由qmake生成的,在我的.pro中,
QT+=opengl
。之后,我对其进行了修改,以包括其他头文件/库,如OpenCL。以下是此生成文件的顶部部分:

CC            = /usr/bin/gcc-4.2
CXX           = /usr/bin/g++-4.2
DEFINES       = -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED
CFLAGS        = -pipe -O2 -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.6 -Wall -W $(DEFINES)
CXXFLAGS      = -pipe -O2 -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.6 -Wall -W $(DEFINES)
GPU        = /Developer/GPU\ Computing
INC_GSL       = /opt/local/include
INCPATH       = -I$(INC_GSL) -I$(GPU)/OpenCL/common/inc -I/opt/local/share/qt4/mkspecs/macx-g++ -I. -I. -I/opt/local/Library/Frameworks/QtCore.framework/Versions/4/Headers -I/opt/local/Library/Frameworks/QtGui.framework/Versions/4/Headers -I/opt/local/Library/Frameworks/QtOpenGL.framework/Versions/4/Headers -I. -I/opt/local/Library/Frameworks/QtOpenGL.framework/Versions/4/Headers -I/opt/local/Library/Frameworks/QtGui.framework/Versions/4/Headers -I/opt/local/Library/Frameworks/QtCore.framework/Versions/4/Headers -I/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/System/Library/Frameworks/AGL.framework/Headers -I. -F/opt/local/Library/Frameworks -I/$(GPU)/shared/inc -I/System/Library/Frameworks/OpenCL.framework/Headers
LINK          = /usr/bin/g++-4.2
LFLAGS        = -headerpad_max_install_names -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.6
LIBS          = $(SUBLIBS) -F/opt/local/Library/Frameworks -F/opt/local/lib -F/System/Library/Frameworks -F/opt/local/Library/Frameworks -F/opt/local/lib -L/opt/local/lib -framework QtOpenGL -framework QtGui -framework QtCore -framework OpenGL -framework AGL -framework OpenCL -lgsl -lgslcblas -lfftw3 -L$(GPU)/shared/lib/darwin -lGLEW

不要在OS X上使用GLEW。由于OS X实现OpenGL的方式,它不会有多大的成就-它提供的扩展都在编译时可用,不需要执行运行时扩展加载

如果在OS X上编译软件时没有可用的扩展,那你就倒霉了,因为该平台旨在为任何给定版本的所有苹果支持的硬件(Hackintosh是另一回事)提供同质功能集(例如,任何OS X 10.8安装都将提供OpenGL 3.2和相同的扩展集)。这就是为什么当您需要某些OpenGL功能时,您最终以OSX版本号为目标


话虽如此,如果您在OS X(10.7+)上包含OpenGL 3.2核心上下文并获得该上下文,
glClampColor(…)
将被定义并可用。此外,如果您有OpenGL 3.2核心上下文,则不需要
GL\u PROGRAM\u POINT\u SIZE\u NV
,它是OpenGL 3.2的核心,非供应商特定的令牌已从
GL_VERTEX_PROGRAM_POINT_SIZE
重命名为
GL_PROGRAM_POINT_SIZE

问题是我想使用GPU计算SDK(来自Nvidia)提供的OpenGL头和库唯一包含glClampColor原型的头文件是/Developer/GPU Computing/C/common/inc/GL/glew.h不幸的是,如果你运气不好,在OS X上做不到这一点。为什么不想使用平台附带的OpenGL库和头文件?这是做这类事情的唯一可移植的方法。尝试更改标题顺序,glew需要包含在gl.h e glext.h之前。gl.h可能包含在qglwidget中,因此在您的案例中,它会在glew之前包含。这就解释了前两个错误。
#ifndef GLWIDGET_H
#define GLWIDGET_H

#include <QGLWidget>
#include <GL/glew.h>
#include <QTimer>
#include "NBody.hpp"
#include "Timer.h"

 class GLWidget : public QGLWidget
 {
     Q_OBJECT

 public:

     GLWidget(QWidget *parent = NULL);

     ~GLWidget();
/opt/local/bin/uic DiskGal_IC.ui -o ui_DiskGal_IC.h
/opt/local/bin/uic YourGalaxy.ui -o ui_YourGalaxy.h
/usr/bin/g++-4.2 -c -pipe -O2 -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.6 -Wall -W -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/opt/local/include -I/Developer/GPU\ Computing/OpenCL/common/inc -I/opt/local/share/qt4/mkspecs/macx-g++ -I. -I. -I/opt/local/Library/Frameworks/QtCore.framework/Versions/4/Headers -I/opt/local/Library/Frameworks/QtGui.framework/Versions/4/Headers -I/opt/local/Library/Frameworks/QtOpenGL.framework/Versions/4/Headers -I. -I/opt/local/Library/Frameworks/QtOpenGL.framework/Versions/4/Headers -I/opt/local/Library/Frameworks/QtGui.framework/Versions/4/Headers -I/opt/local/Library/Frameworks/QtCore.framework/Versions/4/Headers -I/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/System/Library/Frameworks/AGL.framework/Headers -I. -F/opt/local/Library/Frameworks -I//Developer/GPU\ Computing/shared/inc -I/System/Library/Frameworks/OpenCL.framework/Headers -o DiskGal_IC.o DiskGal_IC.cpp
In file included from GLWidget.hpp:5,
                 from YourGalaxy.h:30,
                 from DiskGal_IC.h:25,
                 from DiskGal_IC.cpp:1:
//Developer/GPU Computing/shared/inc/GL/glew.h:66:2: error: #error gl.h included before glew.h
//Developer/GPU Computing/shared/inc/GL/glew.h:69:2: error: #error glext.h included before glew.h
In file included from GLWidget.hpp:5,
                 from YourGalaxy.h:30,
                 from DiskGal_IC.h:25,
                 from DiskGal_IC.cpp:1:
//Developer/GPU Computing/shared/inc/GL/glew.h:5855: error: ‘GLint64EXT’ has not been declared
//Developer/GPU Computing/shared/inc/GL/glew.h:5856: error: ‘GLuint64EXT’ has not been declared
//Developer/GPU Computing/shared/inc/GL/glew.h:9020: error: ‘PFNGLCOPYTEXSUBIMAGE3DPROC’ does not name a type
//Developer/GPU Computing/shared/inc/GL/glew.h:9021: error: ‘PFNGLDRAWRANGEELEMENTSPROC’ does not name a type
//Developer/GPU Computing/shared/inc/GL/glew.h:9022: error: ‘PFNGLTEXIMAGE3DPROC’ does not name a type
//Developer/GPU Computing/shared/inc/GL/glew.h:9023: error: ‘PFNGLTEXSUBIMAGE3DPROC’ does not name a type
//Developer/GPU Computing/shared/inc/GL/glew.h:9025: error: ‘PFNGLACTIVETEXTUREPROC’ does not name a type
//Developer/GPU Computing/shared/inc/GL/glew.h:9026: error: ‘PFNGLCLIENTACTIVETEXTUREPROC’ does not name a type
...
CC            = /usr/bin/gcc-4.2
CXX           = /usr/bin/g++-4.2
DEFINES       = -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED
CFLAGS        = -pipe -O2 -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.6 -Wall -W $(DEFINES)
CXXFLAGS      = -pipe -O2 -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.6 -Wall -W $(DEFINES)
GPU        = /Developer/GPU\ Computing
INC_GSL       = /opt/local/include
INCPATH       = -I$(INC_GSL) -I$(GPU)/OpenCL/common/inc -I/opt/local/share/qt4/mkspecs/macx-g++ -I. -I. -I/opt/local/Library/Frameworks/QtCore.framework/Versions/4/Headers -I/opt/local/Library/Frameworks/QtGui.framework/Versions/4/Headers -I/opt/local/Library/Frameworks/QtOpenGL.framework/Versions/4/Headers -I. -I/opt/local/Library/Frameworks/QtOpenGL.framework/Versions/4/Headers -I/opt/local/Library/Frameworks/QtGui.framework/Versions/4/Headers -I/opt/local/Library/Frameworks/QtCore.framework/Versions/4/Headers -I/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/System/Library/Frameworks/AGL.framework/Headers -I. -F/opt/local/Library/Frameworks -I/$(GPU)/shared/inc -I/System/Library/Frameworks/OpenCL.framework/Headers
LINK          = /usr/bin/g++-4.2
LFLAGS        = -headerpad_max_install_names -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.6
LIBS          = $(SUBLIBS) -F/opt/local/Library/Frameworks -F/opt/local/lib -F/System/Library/Frameworks -F/opt/local/Library/Frameworks -F/opt/local/lib -L/opt/local/lib -framework QtOpenGL -framework QtGui -framework QtCore -framework OpenGL -framework AGL -framework OpenCL -lgsl -lgslcblas -lfftw3 -L$(GPU)/shared/lib/darwin -lGLEW