首页 > 解决方案 > 与 PreMake 的静态链接

问题描述

首先对我糟糕的英语感到抱歉。

我正在尝试链接 raylib。

Windows 10 PreMake 版本 5.0 g++ 版本 8.1.0

目录


    // premake5.lua
    workspace "foo"
        architecture "x64"
        configurations {"Debug","Release"}
        outputdir = "%{cfg.buildcfg}-%{cfg.architecture}-%{cfg.system}"
    
    project "foo"
        location "./build/"
        kind "ConsoleApp"
        language "C++"
        targetdir "./build/%{cfg.buildcfg}"
        files { "./src/**.cpp",
        "./src/**.c",
        "./dependencies/**.h"
        }
        includedirs {"./dependencies/**"}
        links{"raylib"}
        libdirs{"./dependencies/**"}
    
    
    
        filter "configurations:Debug"
        defines { "DEBUG" }
        symbols "On"
    
        filter "configurations:Release"
        defines { "NDEBUG" }
        optimize "On

"```

// main.cpp
#include <iostream>
#include <raylib.h>
int main(){
    const int screenWidth = 800;

    const int screenHeight = 450;

    InitWindow(screenWidth, screenHeight, "raylib [core] example - basic window");

    SetTargetFPS(60);            


    while (!WindowShouldClose())
    {
        BeginDrawing();

            ClearBackground(RAYWHITE);

            DrawText("Congrats! You created your first window!", 190, 200, 20, LIGHTGRAY);

        EndDrawing();
        //----------------------------------------------------------------------------------
    }

  
    CloseWindow();
  

    return 0;

}```

错误消息:链接 Mew ../dependencies/raylib/lib/libraylib.a(core.o):core.c:(.text+0x14dcd): undefined reference to timeEndPeriod' ../dependencies/raylib/lib/libraylib.a(core.o):core.c:(.text+0x167ca): undefined reference to timeBeginPeriod' ../dependencies/raylib/lib/libraylib. a(rglfw.o):rglfw.c:(.text+0x16fa): 未定义引用__imp_CreateRectRgn' ../dependencies/raylib/lib/libraylib.a(rglfw.o):rglfw.c:(.text+0x1736): undefined reference to __imp_DeleteObject'
../dependencies/raylib/lib/libraylib.a(rglfw.o):rglfw.c:(.text+0x1791 ): 未定义引用__imp_SwapBuffers' ../dependencies/raylib/lib/libraylib.a(rglfw.o):rglfw.c:(.text+0x21ce): undefined reference to __imp_GetDeviceCaps'
../dependencies/raylib/lib/libraylib.a(rglfw.o):rglfw.c:(.text+0x27ff): 未定义引用__imp_CreateDCW' ../dependencies/raylib/lib/libraylib.a(rglfw.o):rglfw.c:(.text+0x2813): undefined reference to __imp_GetDeviceGammaRamp' ../dependencies/raylib/lib/ libraylib.a(rglfw.o):rglfw.c:(.text+0x281c): 未定义引用__imp_DeleteDC' ../dependencies/raylib/lib/libraylib.a(rglfw.o):rglfw.c:(.text+0x6154): undefined reference to __imp_CreateDCW'
../dependencies/raylib/lib/libraylib.a(rglfw.o):rglfw.c:(.text +0x6183): 未定义的引用__imp_GetDeviceCaps' ../dependencies/raylib/lib/libraylib.a(rglfw.o):rglfw.c:(.text+0x619c): undefined reference to __imp_DeleteDC' ../dependencies/raylib/lib/libraylib.a(rglfw.o):rglfw.c:(.text+0x6308): 未定义引用__imp_GetDeviceCaps' ../dependencies/raylib/lib/libraylib.a(rglfw.o):rglfw.c:(.text+0x633e): undefined reference to __imp_GetDeviceCaps'
../dependencies/raylib/lib/libraylib.a(rglfw .o):rglfw.c:(.text+0x6539): 未定义对__imp_CreateDIBSection' ../dependencies/raylib/lib/libraylib.a(rglfw.o):rglfw.c:(.text+0x6573): undefined reference to __imp_CreateBitmap' 的引用
../dependencies/raylib/lib/libraylib.a(rglfw.o):rglfw.c:(.text+0x660b): 未定义对__imp_DeleteObject' ../dependencies/raylib/lib/libraylib.a(rglfw.o):rglfw.c:(.text+0x6660): undefined reference to __imp_DeleteObject' ../dependencies/raylib/lib/libraylib.a(rglfw.o):rglfw.c:(.text+0x7e89) 的引用:对__imp_SetDeviceGammaRamp' ../dependencies/raylib/lib/libraylib.a 的
未定义引用__imp_CreateDCW' ../dependencies/raylib/lib/libraylib.a(rglfw.o):rglfw.c:(.text+0x7e98): undefined reference to (rglfw.o):rglfw.c:(.text+0x7ea1): 未定义引用__imp_DeleteDC' ../dependencies/raylib/lib/libraylib.a(rglfw.o):rglfw.c:(.text+0xdcb2): undefined reference to __imp_ChoosePixelFormat' ../dependencies/raylib/lib/libraylib.a(rglfw.o):rglfw.c:(.text+0xdcc0) : 未定义的引用__imp_SetPixelFormat' ../dependencies/raylib/lib/libraylib.a(rglfw.o):rglfw.c:(.text+0xe159): undefined reference to __imp_DescribePixelFormat' ../dependencies/raylib/lib/libraylib.a(rglfw.o):rglfw.c:(.text+0xe251): 未定义引用__imp_DescribePixelFormat' ../dependencies/raylib/lib/libraylib.a(rglfw.o):rglfw.c:(.text+0xe61d): undefined reference to __imp_DescribePixelFormat' ../dependencies/raylib/lib/libraylib.a(rglfw .o):rglfw.c:(.text+0xe63c): undefined reference to `__imp_SetPixelFormat'
collect2.exe: error: ld returned 1 exit status mingw32-make: *** [Makefile:78: Debug/Mew.exe]错误 1

谢谢你,也原谅我的英语。

标签: c++buildpremake

解决方案


有点晚了,但我会试试的。在 Windows 上编译时,您需要显式添加链接库依赖项,尤其是 Windows 依赖项。你描述的是链接错误。要解决链接问题,您必须在链接依赖中添加一些库:opengl32.lib、gdi32.lib、user32.lib、ole32.lib,以及可选:[netapi32.lib、Wininet.lib]

__imp_SetPixelFormat、__imp_DescribePixelFormat、__imp_ChoosePixelFormat 在 gdi32.lib 中定义 __imp_SetDeviceGammaRamp 在 opengl.lib 中定义 __imp_DeleteObject、__imp_CreateDCW、__imp_SwapBuffers、__imp_DeleteDC 在 user32.lib 中定义

希望它是有用的。

PS:对于运行时,请确保您拥有正确的可再发行文件(dll)。


推荐阅读