c - 无法在 OS X 10.9 Mavericks 上针对 GLEW 构建

标签 c xcode macos opengl glew

我正在尝试在 OS X 10.9 和 Xcode 5.1 上使用 GLEW 设置一个程序,但是在尝试构建它时,我收到了大量来自 glew.h 的错误:

Build target HelloGL

CompileC /Users/rpowell/Library/Developer/Xcode/DerivedData/HelloGL-hkapwtszjscyivcyxfphwntzlxmw/Build/Intermediates/HelloGL.build/Debug/HelloGL.build/Objects-normal/x86_64/main.o HelloGL/main.c normal x86_64 c com.apple.compilers.llvm.clang.1_0.compiler
    cd /Users/rpowell/Projects/HelloGL
    export LANG=en_US.US-ASCII
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x c -arch x86_64 -fmessage-length=0 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit=0 -std=gnu99 -fmodules -fmodules-cache-path=/Users/rpowell/Library/Developer/Xcode/DerivedData/ModuleCache -Wno-trigraphs -fpascal-strings -O0 -Wno-missing-field-initializers -Wno-missing-prototypes -Werror=return-type -Werror=deprecated-objc-isa-usage -Werror=objc-root-class -Wno-missing-braces -Wparentheses -Wswitch -Wunused-function -Wno-unused-label -Wno-unused-parameter -Wunused-variable -Wunused-value -Wempty-body -Wconditional-uninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wconstant-conversion -Wint-conversion -Wbool-conversion -Wenum-conversion -Wshorten-64-to-32 -Wpointer-sign -Wno-newline-eof -DDEBUG=1 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk -fasm-blocks -fstrict-aliasing -Wdeprecated-declarations -mmacosx-version-min=10.9 -g -Wno-sign-conversion -I/Users/rpowell/Library/Developer/Xcode/DerivedData/HelloGL-hkapwtszjscyivcyxfphwntzlxmw/Build/Intermediates/HelloGL.build/Debug/HelloGL.build/HelloGL.hmap -I/usr/local/include -I/Users/rpowell/Library/Developer/Xcode/DerivedData/HelloGL-hkapwtszjscyivcyxfphwntzlxmw/Build/Products/Debug/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Users/rpowell/Library/Developer/Xcode/DerivedData/HelloGL-hkapwtszjscyivcyxfphwntzlxmw/Build/Intermediates/HelloGL.build/Debug/HelloGL.build/DerivedSources/x86_64 -I/Users/rpowell/Library/Developer/Xcode/DerivedData/HelloGL-hkapwtszjscyivcyxfphwntzlxmw/Build/Intermediates/HelloGL.build/Debug/HelloGL.build/DerivedSources -F/Users/rpowell/Library/Developer/Xcode/DerivedData/HelloGL-hkapwtszjscyivcyxfphwntzlxmw/Build/Products/Debug -MMD -MT dependencies -MF /Users/rpowell/Library/Developer/Xcode/DerivedData/HelloGL-hkapwtszjscyivcyxfphwntzlxmw/Build/Intermediates/HelloGL.build/Debug/HelloGL.build/Objects-normal/x86_64/main.d --serialize-diagnostics /Users/rpowell/Library/Developer/Xcode/DerivedData/HelloGL-hkapwtszjscyivcyxfphwntzlxmw/Build/Intermediates/HelloGL.build/Debug/HelloGL.build/Objects-normal/x86_64/main.dia -c /Users/rpowell/Projects/HelloGL/HelloGL/main.c -o /Users/rpowell/Library/Developer/Xcode/DerivedData/HelloGL-hkapwtszjscyivcyxfphwntzlxmw/Build/Intermediates/HelloGL.build/Debug/HelloGL.build/Objects-normal/x86_64/main.o

In file included from /Users/rpowell/Projects/HelloGL/HelloGL/main.c:1:
/usr/local/include/GL/glew.h:15043:17: error: declaration of 'PFNGLCOPYTEXSUBIMAGE3DPROC' must be imported from module 'OpenGL.GL3' before it is required
GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE3DPROC __glewCopyTexSubImage3D;
                ^
In module 'OpenGL' imported from /usr/local/include/GL/glew.h:1186:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Headers/gl3.h:1762:25: note: previous declaration is here
typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
                        ^
In file included from /Users/rpowell/Projects/HelloGL/HelloGL/main.c:1:
/usr/local/include/GL/glew.h:15049:17: error: unknown type name 'PFNGLCLIENTACTIVETEXTUREPROC'; did you mean 'PFNGLACTIVETEXTUREPROC'?
GLEW_FUN_EXPORT PFNGLCLIENTACTIVETEXTUREPROC __glewClientActiveTexture;
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
                PFNGLACTIVETEXTUREPROC
In module 'OpenGL' imported from /usr/local/include/GL/glew.h:1186:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Headers/gl3.h:1778:25: note: 'PFNGLACTIVETEXTUREPROC' declared here
typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture);
                        ^
In file included from /Users/rpowell/Projects/HelloGL/HelloGL/main.c:1:
/usr/local/include/GL/glew.h:15057:17: error: unknown type name 'PFNGLLOADTRANSPOSEMATRIXDPROC'
GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXDPROC __glewLoadTransposeMatrixd;
                ^
/usr/local/include/GL/glew.h:15058:17: error: unknown type name 'PFNGLLOADTRANSPOSEMATRIXFPROC'
GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXFPROC __glewLoadTransposeMatrixf;
                ^
/usr/local/include/GL/glew.h:15059:17: error: unknown type name 'PFNGLMULTTRANSPOSEMATRIXDPROC'
GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXDPROC __glewMultTransposeMatrixd;
                ^
/usr/local/include/GL/glew.h:15060:17: error: unknown type name 'PFNGLMULTTRANSPOSEMATRIXFPROC'
GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXFPROC __glewMultTransposeMatrixf;
                ^
/usr/local/include/GL/glew.h:15061:17: error: unknown type name 'PFNGLMULTITEXCOORD1DPROC'; did you mean 'PFNGLMULTITEXCOORD4XPROC'?
GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DPROC __glewMultiTexCoord1d;
                ^~~~~~~~~~~~~~~~~~~~~~~~
                PFNGLMULTITEXCOORD4XPROC
/usr/local/include/GL/glew.h:13827:28: note: 'PFNGLMULTITEXCOORD4XPROC' declared here
typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4XPROC) (GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
                           ^
/usr/local/include/GL/glew.h:15062:17: error: unknown type name 'PFNGLMULTITEXCOORD1DVPROC'; did you mean 'PFNGLMULTITEXCOORD1HNVPROC'?
GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DVPROC __glewMultiTexCoord1dv;
                ^~~~~~~~~~~~~~~~~~~~~~~~~
                PFNGLMULTITEXCOORD1HNVPROC
/usr/local/include/GL/glew.h:12047:28: note: 'PFNGLMULTITEXCOORD1HNVPROC' declared here
typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalf s);
                           ^
/usr/local/include/GL/glew.h:15063:17: error: unknown type name 'PFNGLMULTITEXCOORD1FPROC'; did you mean 'PFNGLMULTITEXCOORD4XPROC'?
GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FPROC __glewMultiTexCoord1f;
                ^~~~~~~~~~~~~~~~~~~~~~~~
                PFNGLMULTITEXCOORD4XPROC
/usr/local/include/GL/glew.h:13827:28: note: 'PFNGLMULTITEXCOORD4XPROC' declared here
typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4XPROC) (GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
                           ^
/usr/local/include/GL/glew.h:15064:17: error: unknown type name 'PFNGLMULTITEXCOORD1FVPROC'; did you mean 'PFNGLMULTITEXCOORD1HNVPROC'?
GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FVPROC __glewMultiTexCoord1fv;
                ^~~~~~~~~~~~~~~~~~~~~~~~~
                PFNGLMULTITEXCOORD1HNVPROC
/usr/local/include/GL/glew.h:12047:28: note: 'PFNGLMULTITEXCOORD1HNVPROC' declared here
typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalf s);
                           ^
/usr/local/include/GL/glew.h:15065:17: error: unknown type name 'PFNGLMULTITEXCOORD1IPROC'
GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IPROC __glewMultiTexCoord1i;
                ^
/usr/local/include/GL/glew.h:15066:17: error: unknown type name 'PFNGLMULTITEXCOORD1IVPROC'
GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IVPROC __glewMultiTexCoord1iv;
                ^
/usr/local/include/GL/glew.h:15067:17: error: unknown type name 'PFNGLMULTITEXCOORD1SPROC'; did you mean 'PFNGLMULTITEXCOORD4XPROC'?
GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SPROC __glewMultiTexCoord1s;
                ^~~~~~~~~~~~~~~~~~~~~~~~
                PFNGLMULTITEXCOORD4XPROC
/usr/local/include/GL/glew.h:13827:28: note: 'PFNGLMULTITEXCOORD4XPROC' declared here
typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4XPROC) (GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
                           ^
/usr/local/include/GL/glew.h:15068:17: error: unknown type name 'PFNGLMULTITEXCOORD1SVPROC'; did you mean 'PFNGLMULTITEXCOORD1HNVPROC'?
GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SVPROC __glewMultiTexCoord1sv;
                ^~~~~~~~~~~~~~~~~~~~~~~~~
                PFNGLMULTITEXCOORD1HNVPROC
/usr/local/include/GL/glew.h:12047:28: note: 'PFNGLMULTITEXCOORD1HNVPROC' declared here
typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalf s);
                           ^
/usr/local/include/GL/glew.h:15069:17: error: unknown type name 'PFNGLMULTITEXCOORD2DPROC'; did you mean 'PFNGLMULTITEXCOORD4XPROC'?
GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DPROC __glewMultiTexCoord2d;
                ^~~~~~~~~~~~~~~~~~~~~~~~
                PFNGLMULTITEXCOORD4XPROC
/usr/local/include/GL/glew.h:13827:28: note: 'PFNGLMULTITEXCOORD4XPROC' declared here
typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4XPROC) (GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
                           ^
/usr/local/include/GL/glew.h:15070:17: error: unknown type name 'PFNGLMULTITEXCOORD2DVPROC'; did you mean 'PFNGLMULTITEXCOORD2HNVPROC'?
GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DVPROC __glewMultiTexCoord2dv;
                ^~~~~~~~~~~~~~~~~~~~~~~~~
                PFNGLMULTITEXCOORD2HNVPROC
/usr/local/include/GL/glew.h:12049:28: note: 'PFNGLMULTITEXCOORD2HNVPROC' declared here
typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalf s, GLhalf t);
                           ^
/usr/local/include/GL/glew.h:15071:17: error: unknown type name 'PFNGLMULTITEXCOORD2FPROC'; did you mean 'PFNGLMULTITEXCOORD4XPROC'?
GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FPROC __glewMultiTexCoord2f;
                ^~~~~~~~~~~~~~~~~~~~~~~~
                PFNGLMULTITEXCOORD4XPROC
/usr/local/include/GL/glew.h:13827:28: note: 'PFNGLMULTITEXCOORD4XPROC' declared here
typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4XPROC) (GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
                           ^
/usr/local/include/GL/glew.h:15072:17: error: unknown type name 'PFNGLMULTITEXCOORD2FVPROC'; did you mean 'PFNGLMULTITEXCOORD2HNVPROC'?
GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FVPROC __glewMultiTexCoord2fv;
                ^~~~~~~~~~~~~~~~~~~~~~~~~
                PFNGLMULTITEXCOORD2HNVPROC
/usr/local/include/GL/glew.h:12049:28: note: 'PFNGLMULTITEXCOORD2HNVPROC' declared here
typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalf s, GLhalf t);
                           ^
/usr/local/include/GL/glew.h:15073:17: error: unknown type name 'PFNGLMULTITEXCOORD2IPROC'
GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IPROC __glewMultiTexCoord2i;
                ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.

程序本身非常简单,仅对 GLFW documentation's example code 稍作修改:

#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <stdio.h>

int main(void)
{
    GLFWwindow* window;

    // Initialize the library
    if (!glfwInit())
        return -1;

    // Specify the minimum OpenGL version
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);

    // Create a windowed mode window and its OpenGL context
    window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
    if (!window)
    {
        glfwTerminate();
        return -1;
    }

    // Make the window's context current
    glfwMakeContextCurrent(window);

    printf("GL Version: %s", glGetString(GL_VERSION));

    // Loop until the user closes the window
    while (!glfwWindowShouldClose(window))
    {
        // Render here
        glClear(GL_COLOR_BUFFER_BIT);

        // Swap front and back buffers
        glfwSwapBuffers(window);

        // Poll for and process events
        glfwPollEvents();
    }

    glfwTerminate();
    return 0;
}

有关此项目配置的更多详细信息可能会有所帮助:

  • GLEW 是通过 Homebrew 安装的,它是从项目的 sourceforge 页面上的最新 tarball 构建的
  • 我已经更改了项目中的一些build设置
    • 始终搜索用户路径 设置为 YES
    • User Header Search Paths 设置为 /usr/local/include
  • 项目链接到 libGLEW.1.10.0.dyliblibglfw.3.0.dylib

如果有人以前遇到过这个问题,或者有解决这个问题的方法,我将非常感激。

最佳答案

好吧,一些深入的研究帮助我弄清楚了 Clang 到底在提示什么。看起来 Xcode 5.1 附带的 Clang 版本包括对 Modules 的支持;这非常酷和有趣,解决了一堆问题,但也完全打破了 GLEW。

通过将启用模块(C 和 objective-c ) 构建选项设置为 NO,一切都像在以前的版本中一样工作,并且 GLEW 按预期工作。

关于c - 无法在 OS X 10.9 Mavericks 上针对 GLEW 构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22759943/

相关文章:

c - 在 UNIX 服务器上用 C 编写客户端/服务器程序

c - 使用指针在字符串中出现单词

c - 定义一个采用结构实例并为每个 'free' 成员调用 'void*' 的宏

xcode - 在 cocoapods podspec 文件中定义 header 搜索路径

objective-c - [NSLocale PreferredLanguages] 和 [[NSUserDefaults standardUserDefaults] objectForKey : @"AppleLanguages"]? 之间有什么区别

objective-c - 在设置 Cocoa Pods 和安装 Ruby 更新时出错

c - 为学生 ID 和分数生成正确的输出并找到最大值和最小值?

objective-c - 数组在 Xcode 4 调试器中显示为空,即使它们不是

macos - Grep 文件搜索返回 : Is a directory in OSX Mountain Lion

javascript - 使用 JavaScript.evaluate 检测 WKWebView 中的按钮单击(按类名)