【发布时间】:2013-10-20 16:51:39
【问题描述】:
我正在 Mac 上开发 C++ 应用程序并使用 CGL 来初始化 OpenGL:
EGL_CONTEXT EglWrapperMac::CreateContext() {
EGL_CONTEXT context;
if (kCGLNoError != CGLCreateContext(m_display, NULL, &context)) {
throw EXT_EXCEPTION(EGL_WRAPPER_ERROR_CREATE_CTX);
}
return context;
}
我还使用 Cmake 生成 XCode 解决方案。
不幸的是,由于缺少所需的库,构建失败。我在cmake中尝试了以下语句:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -framework CGL -framework OpenGL")
和set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lCGL -lOpenGL") 没有运气。
更新:以下是编译错误:
Undefined symbols for architecture x86_64:
"_CGLChoosePixelFormat", referenced from:
EglWrapperMac::EglWrapperMac(EglSetup const&, std::__1::shared_ptr<IEngineWindow>) in libVEngineRenderer.a(EglWrapper.o)
"_CGLCreateContext", referenced from:
EglWrapperMac::CreateContext() in libVEngineRenderer.a(EglWrapper.o)
"_CGLDestroyPixelFormat", referenced from:
EglWrapperMac::~EglWrapperMac() in libVEngineRenderer.a(EglWrapper.o)
"_CGLFlushDrawable", referenced from:
EglWrapperMac::Present() in libVEngineRenderer.a(EglWrapper.o)
"_CGLGetCurrentContext", referenced from:
EglWrapperMac::GetCurrentContext() in libVEngineRenderer.a(EglWrapper.o)
"_CGLReleaseContext", referenced from:
EglWrapperMac::DeleteContext(_CGLContextObject*) in libVEngineRenderer.a(EglWrapper.o)
"_CGLSetCurrentContext", referenced from:
EglWrapperMac::MakeCurrent(_CGLContextObject*) in libVEngineRenderer.a(EglWrapper.o)
我该如何处理?
【问题讨论】:
-
你如何显示你得到的错误?
-
OS X 中没有 CGL 框架(CGL 包含在 OpenGL 框架中,您只需要
#include OpenGL/OpenGL.h),您也不要使用-lXXX链接到框架。现在,根据您的 Makefile 的结构,您可能还有一个称为 LD_FLAGS 的属性,用于单独的链接阶段 - 您还需要在其中包含-framework OpenGL。这个指令both,包括框架的路径解析和链接器路径解析。