错误:`fprint'的多重定义 - 使用SDL_ttf时

时间:2016-03-30 12:22:25

标签: c++11 mingw32 codelite sdl-ttf tdm-gcc

我有一个使用此代码的自定义库(https://www.dropbox.com/s/iwft7snjmntf160/SoASpriteFont.zip?dl=0)。 链接代码是为Visual Studio编写的;我在Windows上使用CodeLite。

它有一个使用fprintf的SpriteFont.cpp。

将SpriteFont作为其一部分的静态库自行编译并很好地生成*.a

然而,当我通过其他代码使用SpriteFont时,我收到链接器错误(如果我没有记错的话):

D:/Coding/TDM-GCC-32/bin/g++.exe -o ./Debug/tmp @"tmp.txt" -L. -L../deps/lib/ -L../bengine/lib/  -lbengine -lSDL2_ttf -lSDL2main -lSDL2 -lopengl32 -lglew32
D:/Coding/TDM-GCC-32/bin/../lib/gcc/mingw32/5.1.0/../../../libmsvcrt.a(dsnos00619.o):(.text+0x0): multiple definition of `fprintf'
../bengine/lib//libbengine.a(SpriteFont.cpp.o):D:/Coding/TDM-GCC-32/include/stdio.h:243: first defined here

我已经全部阅读并发现了一些类似的情况,但我没有设法用来解决这个问题。

听起来TDM-GCC在其fprint中重新定义stdio.h的方式存在问题,但我看不清楚如何。经过进一步检查,我认为问题可能在于SDL_ttf,SpriteFont会使用它。

另外,我尝试过使用stdio.h中的其他函数,它们编译得很好;问题似乎只是fprintf

我尝试创建一个准系统程序来说明the problem。希望能帮助到你。希望它是一个CodeLite项目的事实不会是一个恼怒的来源。 如果我可以提供更多信息或代码,请询问。

1 个答案:

答案 0 :(得分:1)

这通常发生在MinGW中,当链接dll文件时,该文件也有<NAME>.dll.a形式的文件 要解决此问题,只需直接链接到dll(我最近在Windows / w MinGW上构建LLDB调试器时遇到了同样的问题,解决方案是直接链接到dll文件并删除{{ 1}}文件