raylib c++ rundefine 对 InitWindow 和 raylib 的所有函数的引用

问题描述 投票:0回答:1

c++编译器:来自sourceforge的默认mingw

代码编辑器:vscode

我的文件结构:

*build/
├── _deps/
│   ├── raylib-build/
│   ├── raylib-src/
│   │   ├── CHANGELOG
│   │   ├── include/
│   │   ├── lib/
│   │   ├── LICENSE
│   │   └── README.md
│   └── raylib-tmp/
├── .cmake/
│   └── api/
│       └── v1/
├── cmake_install.cmake
├── CMakeCache.txt
├── CMakeFiles/...morehere
├── compile_commands.json
└── Makefile
CMakeLists.txt
main.cpp*

主.cpp文件:

#include "raylib.h"

int main()
{
    // Initialization
    InitWindow(800, 600, "Hello Raylib");
    SetTargetFPS(60);

    // Main game loop
    while (!WindowShouldClose())
    {
        // Update

        // Draw
        BeginDrawing();
        ClearBackground(RAYWHITE);
        DrawText("Hello, Raylib!", 190, 200, 20, LIGHTGRAY);
        EndDrawing();
    }

    // De-Initialization
    CloseWindow();

    return 0;
}

CMakeLists.txt:

cmake_minimum_required(VERSION 3.30)
project(myproject)
include(FetchContent)

set(RAYLIB_VERSION 5.0)
FetchContent_Declare(
    raylib
    URL https://github.com/raysan5/raylib/releases/download/5.0/raylib-5.0_win64_mingw-w64.zip
)

FetchContent_MakeAvailable(raylib)

# Include the raylib headers
include_directories(${raylib_SOURCE_DIR}/include)

# Link the raylib library
add_executable(main main.cpp)
target_link_libraries(main raylib)

运行cmake ..输出:

--downloades raylib here--
-- [download 98% complete]
-- [download 99% complete]
-- [download 100% complete]
-- Configuring done (3.7s)
-- Generating done (0.1s)
-- Build files have been written to: C:/Users/admin/Desktop/projects/kui c++/main/build

运行 mingw32-make 输出:

[ 50%] Building CXX object CMakeFiles/main.dir/main.cpp.obj
[100%] Linking CXX executable main.exe
CMakeFiles\main.dir/objects.a(main.cpp.obj): In function `main':
C:/Users/admin/Desktop/projects/kui c++/main/main.cpp:6: undefined reference to `InitWindow'
C:/Users/admin/Desktop/projects/kui c++/main/main.cpp:7: undefined reference to `SetTargetFPS'
C:/Users/admin/Desktop/projects/kui c++/main/main.cpp:10: undefined reference to `WindowShouldClose'
C:/Users/admin/Desktop/projects/kui c++/main/main.cpp:15: undefined reference to `BeginDrawing'
C:/Users/admin/Desktop/projects/kui c++/main/main.cpp:16: undefined reference to `ClearBackground'
C:/Users/admin/Desktop/projects/kui c++/main/main.cpp:17: undefined reference to `DrawText'
C:/Users/admin/Desktop/projects/kui c++/main/main.cpp:22: undefined reference to `CloseWindow'
collect2.exe: error: ld returned 1 exit status
CMakeFiles\main.dir\build.make:98: recipe for target 'main.exe' failed        
mingw32-make[2]: *** [main.exe] Error 1
CMakeFiles\Makefile2:81: recipe for target 'CMakeFiles/main.dir/all' failed   
mingw32-make[1]: *** [CMakeFiles/main.dir/all] Error 2
Makefile:89: recipe for target 'all' failed
mingw32-make: *** [all] Error 2

我试图链接并让 raylib 与 c++ 一起使用。在教程中,我发现建议使用 CMake,但是在遵循教程步骤后,我仍然收到有关未定义引用的错误消息。如何修改项目来摆脱它们?

c++ cmake libraries mingw-w64 raylib
1个回答
0
投票

FetchContent_Declare
中,您可以更改链接以指向源而不是特定平台的已发布版本:

FetchContent_Declare(
    raylib
    URL https://github.com/raysan5/raylib/archive/refs/tags/5.0.zip
)

这当然会导致

raylib
库与您的项目一起编译,但从FetchContent_Declare的文档来看,我相信这就是这个命令的目的。

另一种方法是简单地下载适合您平台的预编译发布版本,安装它,然后使用

find_package
CMake 调用来使用它。

© www.soinside.com 2019 - 2024. All rights reserved.