我最近在笔记本电脑上安装了MinGW和CSFML,然后运行:
gcc shaders.c -csfml-system -csfml-graphics
我收到错误:
...\ccV1NsAK.o:shaders.c:(.text+0x247):' undefined reference to _imp__sfBlendAlpha'
我该如何解决这个问题? 亲切的问候, 波士顿布鲁克斯。
更新1
我已经玩过安装到不同的搜索路径,但我无法让它工作。我重新安装了MinGW并将CSFML包中的文件粘贴到默认路径。现在我明白了:
gcc shaders.c -lcsfml-system -lcsfml-window -lcsfml-graphics
C:\Users\bbroo\AppData\Local\Temp\cc9QM4Nx.o:shaders.c:(.text+0x2d8): undefined reference to '_imp__sfBlendAlpha'
C:\Users\bbroo\AppData\Local\Temp\cc9QM4Nx.o:shaders.c:(.text+0x318): undefined reference to '_imp__sfTransform_Identity'
collect2.exe: error: ld returned 1 exit status
更新2
我将CSFML复制到我的主文件夹。我明白了:
$ gcc -B ~/CSFML -Ld: ~/CSFML shaders.c -lcsfml-system -lcsfml-window -lcsfml-graphics
c:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../../mingw32/bin/ld.exe: cannot find C:/MinGW/msys/1.0/home/bbroo/CSFML: Permission denied
c:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../../mingw32/bin/ld.exe: cannot find -lcsfml-system
c:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../../mingw32/bin/ld.exe: cannot find -lcsfml-window
c:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../../mingw32/bin/ld.exe: cannot find -lcsfml-graphics
collect2.exe: error: ld returned 1 exit status
可以访问头文件但是dot-a文件是'权限被拒绝' 如何使用MSYS为CSFML中的所有文件的所有用户设置读写权限?
如果我使用C:\ SFML
,同样的问题 更新3
当我将文件解压缩到默认路径时,会在我的dot-a文件所在的文件夹中生成一个子文件夹。它包含几个dot-a文件和一个自述文本文件。
将此README文件复制到仅GCC头文件的目录中 当fixincludes由GCC的makefile运行时:
此目录中的许多文件都是从中自动编辑的 fixincludes进程的标准系统头文件。他们是 系统特定的,不适用于任何其他类型的系统。他们 也不是海湾合作委员会的成员。我们必须这样做是因为 GCC需要ANSI C标头,许多供应商提供ANSI不兼容 头。
因为这是一个自动过程,有时标题会“修复” 严格来说,这不需要修复。只要没有任何东西被打破 通过这个过程,这只是一个不幸的附带不便。 如果它不“太不方便”,我们想纠正它。
更新4
编译没有链接工作正常但单独链接不起作用:
bbroo@DESKTOP-1F1J3SM ~/Shaders
$ ld shaders.o libcsfml-system.a libcsfml-window.a libcsfml-graphics.a
shaders.o:shaders.c:(.text+0x10): undefined reference to `__main'
shaders.o:shaders.c:(.text+0x2d8): undefined reference to `_imp__sfBlendAlpha'
shaders.o:shaders.c:(.text+0x318): undefined reference to `_imp__sfTransform_Identity'
shaders.o:shaders.c:(.text+0x4bc): undefined reference to `sleep'
更新5
现在我明白了:
bbroo@DESKTOP-1F1J3SM ~/Shaders
$ ld shaders.o libcsfml-system.a libcsfml-window.a libcsfml-graphics.a csfml-system-2.dll csfml-window-2.dll csfml-graphics-2.dll
shaders.o:shaders.c:(.text+0x10): undefined reference to `__main'
shaders.o:shaders.c:(.text+0x4bc): undefined reference to `sleep'
答案 0 :(得分:1)
gcc shaders.c libcsfml-system.a libcsfml-window.a libcsfml-graphics.a csfml-system-2.dll csfml-window-2.dll csfml-graphics-2.dll
它对我有用。
答案 1 :(得分:0)
这似乎是一个链接错误。连接SFML库时可能会出错。对于每个IDE,链接库可能会有所不同。
按照教程设置与IDE匹配的SFML库。
答案 2 :(得分:0)
在您的编译命令中: gcc shaders.c -csfml-system -csfml-grphics
您可能错过了它(即-csfml-graphics)没有?
答案 3 :(得分:0)
这里有一个教程:https://www.sfml-dev.org/tutorials/2.4/start-cb.php
在链接器部分截图中,教程提到了需要链接的3个库,这些库将转换为您需要在链接阶段添加的命令行参数:
-lsfml-graphics -lsfml-window -lsfml-system
您可能还需要告诉链接器在哪里找到库,您需要调整它们在机器上的位置,例如
-LD:\ SMFL-2.0 \ lib中