#c #linux #cmake #glfw
#c #linux #cmake #glfw
Вопрос:
Я только начинаю возиться с vulkan и GLFW, но когда я пытаюсь скомпилировать тестовую программу, она выдает мне кучу ошибок компоновщика:
/usr/bin/ld: CMakeFiles/vulkan_test.dir/loops.cpp.o: in function `Loops::Init()':
loops.cpp:(.text 0xd): undefined reference to `glfwInit'
/usr/bin/ld: loops.cpp:(.text 0x1c): undefined reference to `glfwWindowHint'
/usr/bin/ld: loops.cpp:(.text 0x2b): undefined reference to `glfwWindowHint'
/usr/bin/ld: loops.cpp:(.text 0x4f): undefined reference to `glfwCreateWindow'
/usr/bin/ld: CMakeFiles/vulkan_test.dir/loops.cpp.o: in function `Loops::Update()':
loops.cpp:(.text 0xa3): undefined reference to `glfwPollEvents'
/usr/bin/ld: CMakeFiles/vulkan_test.dir/loops.cpp.o: in function `Loops::DeInit()':
loops.cpp:(.text 0xcd): undefined reference to `glfwDestroyWindow'
/usr/bin/ld: loops.cpp:(.text 0xd2): undefined reference to `glfwTerminate'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/vulkan_test.dir/build.make:113: vulkan_test] Error 1
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/vulkan_test.dir/all] Error 2
make: *** [Makefile:91: all] Error 2
Это мой CMakeLists.txt:
cmake_minimum_required(VERSION 3.22)
project(vulkan_test)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_MODULE_PATH /home/headass/CMake_Modules/)
find_package(GLFW REQUIRED)
find_package(Vulkan REQUIRED)
include_directories(${GLFW_INCLUDE_DIRS} ${VULKAN_INCLUDE_DIRS})
add_executable(vulkan_test main.cpp loops.cpp)
target_link_libraries(vulkan_test ${GLFW_LIBRARIES} ${VULKAN_LIBRARIES})
Есть идеи, почему это происходит? У меня установлены vulkan и GLFW, libglfw.so
они находятся в моем /usr/lib/
каталоге, и clangd не видит в этом ничего плохого, но он по-прежнему не может правильно связать.
И да, я пытался найти это в Google, но безрезультатно.
Комментарии:
1.Вы уверены, что эта переменная
GLFW_LIBRARIES
действительно содержит результатыfind_package(GLFW)
? Согласно вашему решению с явной ссылкой противglfw
, это не так. Способ извлечения результатовfind_package(GLFW)
определяетсяFindGLFW.cmake
скриптом, который у вас есть в вашем каталоге/home/headass/CMake_Modules/
. Также вы можете проверить содержимое переменной с помощью simplemessage("GLFW_LIBRARIES: {GLFW_LIBRARIES}")
.2. Я рекомендую использовать Premake ( premake.github.io ). Это НАМНОГО лучше, чем CMake.
Ответ №1:
Изменение:
target_link_libraries(vulkan_test ${GLFW_LIBRARIES} ${VULKAN_LIBRARIES})
Для:
target_link_libraries(vulkan_test glfw ${GLFW_LIBRARIES} ${VULKAN_LIBRARIES})
работала безупречно