【发布时间】: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