如何使用cmake在OSX上针对libGL进行链接?

问题描述

我试图在OSX 10.11上编译camera_calibration,在遇到一些与X11相关的依赖项后,我发现自己仍然陷于一些链接错误:

Undefined symbols for architecture x86_64:
  "_glXChooseVisual",referenced from:
      vis::OpenGLContextGLX::InitializeWindowless(vis::OpenGLContextImpl*) in opengl_context_glx.cc.o
  "_glXCreateContext",referenced from:
      vis::OpenGLContextGLX::InitializeWindowless(vis::OpenGLContextImpl*) in opengl_context_glx.cc.o
  "_glXDestroyContext",referenced from:
      vis::OpenGLContextGLX::Deinitialize() in opengl_context_glx.cc.o
  "_glXGetCurrentContext",referenced from:
      vis::IsOpenGLContextAvailable() in opengl.cc.o
      vis::OpenGLContextGLX::AttachToCurrent() in opengl_context_glx.cc.o
  "_glXGetCurrentDisplay",referenced from:
      vis::OpenGLContextGLX::AttachToCurrent() in opengl_context_glx.cc.o
  "_glXGetCurrentDrawable",referenced from:
      vis::OpenGLContextGLX::AttachToCurrent() in opengl_context_glx.cc.o
  "_glXMakeCurrent",referenced from:
      vis::OpenGLContextGLX::MakeCurrent() in opengl_context_glx.cc.o
ld: symbol(s) not found for architecture x86_64

我发现libGL.dylib具有以下符号:

for lib in /usr/X11R6/lib/*.dylib;do nm -gU $lib | grep _glXChooseVisual;done
000000000000307f T _glXChooseVisual
000000000000307f T _glXChooseVisual
gp:src George$ for lib in /usr/X11R6/lib/*.dylib;do echo $lib && nm -gU $lib | grep _glXChooseVisual;done
/usr/X11R6/lib/libAppleWM.7.dylib
/usr/X11R6/lib/libAppleWM.dylib
/usr/X11R6/lib/libFS.6.dylib
/usr/X11R6/lib/libFS.dylib
/usr/X11R6/lib/libGL.1.dylib
000000000000307f T _glXChooseVisual
/usr/X11R6/lib/libGL.dylib
000000000000307f T _glXChooseVisual

但是我似乎无法调整CMakeLists.txt以考虑到这一点。

我尝试添加:

set(X11R6_INCLUDE_DIRS "/usr/X11R6/include")
set(X11R6_LIBRARIES "/usr/X11R6/lib")

稍后我会在为target_include_directories调用target_link_librarieslibvis时使用它,但似乎并不能解决问题。

-lGL中添加target_link_libraries会导致ld: library not found for -lGL

我也看过CMake's FindOpenGL reference并尝试使用find_package(OpenGL REQUIRED COMPONENTS OpenGL GLX),但走得并不远:

CMake Error at /usr/local/Cellar/cmake/3.18.2/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:165 (message):
  Could NOT find OpenGL (missing: GLX)

关于通过OSX上的CMake正确链接到GLX的任何提示吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)