对_imp_sfBlendAlpha的未定义引用

时间:2017-05-27 11:25:27

标签: c sfml

我最近在笔记本电脑上安装了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'

4 个答案:

答案 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中