我有一个使用此代码的自定义库(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项目的事实不会是一个恼怒的来源。 如果我可以提供更多信息或代码,请询问。
答案 0 :(得分:1)
这通常发生在MinGW中,当链接dll
文件时,该文件也有<NAME>.dll.a
形式的文件
要解决此问题,只需直接链接到dll(我最近在Windows / w MinGW上构建LLDB
调试器时遇到了同样的问题,解决方案是直接链接到dll
文件并删除{{ 1}}文件