C中的Raylib在编译时给出'undefined function'错误

agxfikkp  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(101)

我正在尝试使用C从头开始重新制作Pong。我已经构建了游戏,现在我想真正看到它。我正在使用Windows 10和VSCode(最有可能的问题)。
我的tasks.json命令:

"args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-std=c99",
                "-I\"D:\\forrk\\C Game\\raylib-5.0_win64_mingw-w64\\include\"",
                "-L\"D:\\forrk\\C Game\\raylib-5.0_win64_mingw-w64\\lib\"",
                "-lraylib",
                "-o2",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],

字符串
销售员:gcc --version gcc.exe(Rev 2,Built by MSYS 2 project)13.2.0版权所有(C)2023 Free Software Foundation,Inc.这是自由软件;有关复制条件,请参阅源代码。没有任何保证;甚至不保证适销性或适用于特定用途。
这是我每次都会收到的错误消息(是的,我有西班牙语,“compilar archivo activo”意思是“编译活动文件”,“Iniciando la compilación”意思是“开始编译”,“La compilación ha finalizado con errores”意思是“编译完成但有错误”):

Executing task: C/C++: gcc.exe compilar archivo activo 

Iniciando la compilación...
D:\forrk\_tool\ucrt64\bin\gcc.exe -fdiagnostics-color=always -g "D:\forrk\C Game\pong.c" -std=c99 -I"D:\forrk\C Game\raylib-5.0_win64_mingw-w64\include" -L"D:\forrk\C Game\raylib-5.0_win64_mingw-w64\lib" -lraylib -o2 -o "D:\forrk\C Game\pong.exe"
D:/forrk/_tool/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:\forrk\C Game\raylib-5.0_win64_mingw-w64\lib/libraylib.a(rcore.o):rcore.c:(.text+0x1c494): undefined reference to `timeEndPeriod'

La compilación ha finalizado con errores.

 *  The terminal process failed to launch (exit code: -1). 
 *  Terminal will be reused by tasks, press any key to close it.


我以以下方式安装了raylib:1-将所有内容放入项目文件夹中:IntelliSense可以找到它,但tasks.json不能。2-修复了tasks.json,并将'include'和'lib'文件夹移出了它们的原始文件夹:使用#include时没有错误或警告,但仍然无法编译。3-将'lib'移动到C:中自己的文件夹中(如其他帖子所建议的那样):没有效果
这是VSCode问题吗?我做错了什么吗?我从raylib.com-> github上得到了我的版本,也尝试直接用git克隆,只是为了得到同样的结果。
理想情况下,我想使用C语言的VSCode,而不需要接触Visual Studio上的任何东西(我为C#和Unity设置了Visual Studio)

db2dz4w8

db2dz4w81#

timeEndPeriod函数是在winmm库中定义的,因此您需要将-lwinmm添加到链接器选项集中,位于-lraylib之后。
还要注意,它应该是-O2(意味着优化级别2),而不是-o2(意味着输出文件应该命名为2):

"-lraylib",
"-lwinmm",
"-O2",

字符串

lnvxswe2

lnvxswe22#

要解决这个问题,您必须在gcc命令中添加更多的-l...选项(除了-lraylib之外)(在您的例子中,args位于`tasks.json中)。
以下是相关的错误消息:

D:/forrk/_tool/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:\forrk\C Game\raylib-5.0_win64_mingw-w64\lib/libraylib.a(rcore.o):rcore.c:(.text+0x1c494): undefined reference to `timeEndPeriod'

字符串
libraylib.a中的函数(参见错误消息中的完整路径)已经通过-lraylib选项添加。实际上,在这种情况下,-lX添加了D:\forrk\C Game\raylib-5.0_win64_mingw-w64\lib\libX.a a(Xraylib)。在D:\forrk\C Game\raylib-5.0_win64_mingw-w64\lib\lib*.a中搜索timeEndPeriod,并为找到的每个文件名添加相应的-lX选项。
或者,您可能希望查阅 raylib 文档,了解除了-lraylib之外,它还推荐什么。

相关问题