【问题标题】:Including SOIL2 library in a CMake project在 CMake 项目中包含 SOIL2 库
【发布时间】:2020-07-17 16:41:17
【问题描述】:

我正在尝试在我的 C++ OpenGL 项目中包含 SOIL2。

到目前为止,我已经

  • 从https://github.com/SpartanJ/SOIL2下载了库
  • 通过运行 premake 4 和 make 构建它。
  • 将 src/SOIL2/ 目录复制到 /usr/local/include
  • 尝试将 libsoil2-debug.a 添加到 /usr/local/lib
  • 按照各种方法示例将库包含在 CMake 中

平台是 MacOS (Catalina) 我还是 CMake 的新手,所以我很确定这就是我的问题所在。

目前,我的 CMakeLists 文件如下所示:

cmake_minimum_required(VERSION 3.8)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_C_STANDARD 99)
set(This ComputerGraphicsProgramming)
project(${This} CXX C)

file(GLOB_RECURSE SOURCES src/*.cpp)
file(GLOB_RECURSE SOIL2_SOURCES /usr/local/include/SOIL2/*.c)
add_executable(${This} ${SOURCES} ${HEADERS})

include_directories(
  include
  lib
  /usr/local/include
)
link_directories(
  /usr/local/include
  /usr/local/include/SOIL2
)

find_package(OpenGL REQUIRED)
find_package(glfw3 REQUIRED)
find_package(glew REQUIRED)
find_package(glm REQUIRED)
find_library(soil2-debug REQUIRED)

target_link_libraries(${This}
  GLEW::GLEW
  ${OPENGL_LIBRARIES} glfw
  soil2-debug
)

Texture.hpp,我在其中包含 SOIL 的文件,如下所示:

#include <GL/glew.h>
#include <SOIL2/SOIL2.h>
#include <string>

class Texture
{
  public:
    Texture(std::string filename);
    ~Texture();

  private:
    unsigned int m_ID;
};

这些是我运行 make 时的错误:

$ make
[  9%] Linking CXX executable ComputerGraphicsProgramming
ld: library not found for -lsoil2-debug
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [ComputerGraphicsProgramming] Error 1
make[1]: *** [CMakeFiles/ComputerGraphicsProgramming.dir/all] Error 2
make: *** [all] Error 2

任何帮助表示赞赏!

【问题讨论】:

  • 您是否尝试将其复制到 /usr/lib?
  • 我尝试将 libsoil2-debug.a 放入 /usr/local/lib 并通过 include_directories 和 link_directories 添加 /usr/local/lib。即使我使用 sudo 运行,复制/链接到 /usr/lib 也会出现权限错误

标签: c++ opengl cmake soil


【解决方案1】:

终于有了要构建的项目,使用以下 CMakeLists 文件。感谢您的回复!

cmake_minimum_required(VERSION 3.8)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_C_STANDARD 99)
set(This ComputerGraphicsProgramming)

project(${This} CXX C)

file(GLOB_RECURSE SOURCES src/*.cpp)
add_executable(${This} ${SOURCES} ${HEADERS})

include_directories(
  include
  /usr/local/include
)

find_package(OpenGL REQUIRED)
find_package(glfw3 REQUIRED)
find_package(glew REQUIRED)
find_package(glm REQUIRED)
find_library(SOIL2 soil2-debug)

target_link_libraries(${This}
  GLEW::GLEW
  ${OPENGL_LIBRARIES} glfw
  ${SOIL2}
)

【讨论】:

    【解决方案2】:

    似乎找不到 libsoil2-debug.a。尝试将 /usr/local/lib 添加到您的CMAKE_PREFIX_PATH:

    list(APPEND CMAKE_PREFIX_PATH "/usr/local/lib")

    在 CMakeList.txt 文件顶部的某个位置

    【讨论】:

    • 原来我只是用错了 find_library,但这让我走上了正轨,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    • 1970-01-01
    • 2019-11-05
    相关资源
    最近更新 更多