【问题标题】:CLion CMake ld: library not found + Vulkan and OpenGL questionsCLion CMake ld:找不到库 + Vulkan 和 OpenGL 问题
【发布时间】:2020-08-08 04:05:59
【问题描述】:

我正在尝试为即将到来的项目使用 GLFW 和 Vulkan 进行基本设置。我试图让一个简单的 HelloTriangle 示例工作。当 Vulkan 库正常构建时,GLFW 在运行程序时抛出ld: library not found for -lglfw3。我也不确定我的 HelloTriangle 示例是否是一个工作示例;这是我必须看到的测试 Vulkan 的最基本示例。 这是我的 CMakeList.txt:

cmake_minimum_required(VERSION 3.16)
project(OpenGLRun)

set(CMAKE_CXX_STANDARD 14)
set(glfw3_DIR /usr/local/Cellar/glfw/3.3.2/lib/cmake/glfw3)

add_executable(OpenGLRun main.cpp)

find_package(vulkan REQUIRED)
find_package(glm REQUIRED)
find_package(OpenGL REQUIRED)
find_package(glfw3 REQUIRED)

target_link_libraries(OpenGLRun Vulkan::Vulkan)
target_link_libraries(OpenGLRun glm)
target_link_libraries(OpenGLRun OpenGL::GL)
target_link_libraries(OpenGLRun glfw3)

以及我试图运行的 main.cpp 示例代码以证明一切正常:

#define GLFW_INCLUDE_VULKAN
#include <GLFW/glfw3.h>

#include <iostream>
#include <stdexcept>
#include <cstdlib>

const uint32_t WIDTH = 800;
const uint32_t HEIGHT = 600;

class HelloTriangleApplication {
public:
    void run() {
        initWindow();
        initVulkan();
        mainLoop();
        cleanup();
    }

    private:

        GLFWwindow* window;

        void initWindow() {
            glfwInit();

            glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
            glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE);

            GLFWwindow *window = glfwCreateWindow(WIDTH, HEIGHT, "Vulkan", nullptr, nullptr);
        }

private:
    void initVulkan() {

    }

    void mainLoop() {
        while (!glfwWindowShouldClose(window)) {
            glfwPollEvents();
        }
    }

    void cleanup() {
        glfwDestroyWindow(window);

        glfwTerminate();
    }
};

int main() {
    HelloTriangleApplication app;

    try {
        app.run();
    } catch (const std::exception& e) {
        std::cerr << e.what() << std::endl;
        return EXIT_FAILURE;
    }

    return EXIT_SUCCESS;
}

最后,对于未来,您会推荐 C++/CMake 中的包管理器吗?

提前致谢

【问题讨论】:

  • 您可以尝试只链接到glfw,正如their site 所建议的那样。
  • @BDL 是的,我会问另一个问题,谢谢
  • @squarekittles 但是当我从 CMake 列表中删除 GLFW 的链接和查找时,我收到此错误(仅包括 main.cpp 中的 GLFW)ld: symbol(s) not found for architecture x86_64
  • 对不起,我的意思是在你的 CMake 中只更改一行。将此target_link_libraries(OpenGLRun glfw3) 更改为:target_link_libraries(OpenGLRun glfw)
  • 哇,成功了,谢谢大家的帮助 =)

标签: c++ opengl cmake glfw vulkan


【解决方案1】:

GLFW Build Guide 建议无论您是在编译和链接 GLFW 以及您的应用程序,还是将已安装 GLFW 链接到您的应用程序,您都可以链接 GLFW 到您的应用程序使用glfw 目标(不是glfw3)。将 CMake 中的 target_link_libraries() 命令更改为:

target_link_libraries(OpenGLRun PRIVATE glfw)

注意,在使用诸如此类的基于目标的命令时,您应该始终提供范围参数,以告知 CMake 这是构建要求、使用要求还是两者兼而有之。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-30
    • 2015-10-19
    • 1970-01-01
    • 2011-01-18
    • 2016-10-12
    • 2021-03-06
    相关资源
    最近更新 更多