c++ - 与 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
谢谢你,也原谅我的英语。
解决方案
有点晚了,但我会试试的。在 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)。
推荐阅读
- shell - 如何将批处理迁移到外壳?
- arrays - 如何在 Dart 中循环/映射 json 对象
- javascript - 将blob转换为可下载的文件Angular8
- android - 没有找到类“android.provider.MediaStore$Downloads”
- kubernetes - 在 Amazon EKS 中预置具有静态内容的节点的正确方法是什么?
- entity-framework - “当前数据库提供程序不支持该属性”
- facebook-graph-api - 使用 Facebook Graph API 让 facebook 测试用户成为朋友
- unicode - IBM874 和 MS874 有什么区别?
- c# - ConvertToDouble 在法语语言环境中错误地转换数字
- intellij-idea - 使用 CLion 将文件夹作为项目打开