0

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

它有一个 SpriteFont.cpp 使用fprintf.

将 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-GCCfprint在其 '中重新定义的方式存在问题stdio.h,但我看不出如何。经过进一步检查,我认为问题可能出在 SpriteFont 使用的SDL_ttf上。

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

我试图创建一个准系统程序来说明这个问题。希望能帮助到你。希望它是一个 CodeLite 项目的事实不会成为刺激的根源。如果我可以提供更多信息或代码,请询问。

4

1 回答 1

1

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

于 2016-03-31T09:53:19.717 回答