【问题标题】:CMake and SOIL linkingCMake 和 SOIL 链接
【发布时间】:2018-11-18 17:06:15
【问题描述】:

我为我的 C++ OpenGL 项目安装了 SOIL 库,但我总是得到

undefined reference to `SOIL_load_OGL_texture'

我从搜索中了解到,这意味着 OpenGL 在 SOIL 之前链接。我对 CMAKE 了解不多,但现在我的 CMAKEFile 看起来像这样:

cmake_minimum_required(VERSION 2.8)

project(game)
add_executable(game main.cpp ...(many files))

find_package(OpenGL REQUIRED)

find_package(GLUT REQUIRED)
include_directories( ${OPENGL_INCLUDE_DIRS} ${GLUT_INCLUDE_DIRS})

target_link_libraries(game ${OPENGL_LIBRARIES} ${SOIL} ${GLUT_LIBRARY})
set(CMAKE_CXX_STANDARD 14)

【问题讨论】:

  • 旁注:设置CMAKE_CXX_STANDARD 仅影响followed 可执行文件和库。将此设置放在CMakeLists.txt 的末尾没有意义。
  • 你的 bug 好像就在这里 ${SOIL} 你是怎么设置的?你不需要find_package()吗?

标签: c++ opengl cmake clion


【解决方案1】:

您必须将SOIL 设置为SOIL 库,并且还可能使用link_directories 将路径添加到SOIL 库。

【讨论】:

  • 您能举个例子吗?我对 cmake 完全是菜鸟。我已经通过终端安装了 SOIL 库,所以我将它的头文件添加为预编译的 。我是否必须提供通往 CMake 的路径?
  • 我不知道库在哪里或如何命名,但link_directories 有一个您应该阅读的文档。 link_directories(${path_to_SOIL})
  • 如果缺少符号,很可能它不是一个只有标头的库!
  • 我找到了库,它的路径:/usr/local/lib/libSOIL.a。所以,我试着把它放在 target_link_libraries 中,所以它看起来像: target_link_libraries(game ${/usr/local/lib/libSOIL.a} ${OPENGL_LIBRARIES} ${GLUT_LIBRARY})
  • so SET(SOIL SOIL) 在 target_link_libraries 之前,然后是 link_directories(/usr/local/lib)。
猜你喜欢
  • 2016-10-08
  • 2013-06-04
  • 1970-01-01
  • 2015-03-15
  • 2017-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多