おそらく非常に単純な問題ですが、それは私を困惑させました。
Windowsでコンパイル(gcc / g ++)して正常にリンクするSDL / OpenGL/GLEWベースの静的ライブラリがあります。OS Xでは、同じコードベースがGL_NUM_EXTENSIONSと:: glGetStringi()の宣言が見つからないと主張してコンパイルに失敗します。これは、GLEWをミックスに投入したためです(SDLとOpenGLのみを使用すると、 OS Xも)。
// globals.h
#include <glew.h>
#include <SDL/SDL.h>
// graphics.h
#include "globals.h"
bool HasGLExtension(const char* pName);
// graphics.cpp
#include <string>
#include "graphics.cpp"
bool HasGLExtension(const char* pName)
{
GLint numExtensions;
::glGetIntegerv(GL_NUM_EXTENSIONS, &numExtensions); // error
for (int i = 0; i < numExtensions; ++i)
{
if (strcmp(pName, (char*)::glGetStringi(GL_EXTENSIONS, i)) == 0) // error
{
return true;
}
}
return false;
}
- フレームワークとして構築された依存ライブラリは、/ Library/Frameworksにあります。
- -DGLEW_STATIC -DSDL_NO_GLEXTコンパイルフラグが使用されます(Windowsでは必要に応じて-それらを削除しても問題は解決しません)。
- オートコンプリートでさえ、glew.hの場所が存在することを確認します(もちろん、それは私が得ているエラーではなく、シンボルです)。
- SDL / SDL_opengl.hを含めると、宣言が競合するだけです。
- 問題のある定義はglew.hにあります
私が行方不明になっているのは明らかですか?