Ошибка: множественное определение `fprint' - при использовании SDL_ttf

У меня есть пользовательская библиотека, которая использует этот код ( https://www.dropbox.com/s/iwft7snjmntf160/SoASpriteFont.zip?dl=0). Связанный код был написан для Visual Studio; Я использую CodeLite на Windows.

У него есть 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-GCC fprint в его ' stdio.h, но я не вижу как. После дальнейшего изучения я думаю, что проблема может быть связана с SDL_ttf, который используется SpriteFont.

Кроме того, я попытался использовать другие функции из stdio.h и они хорошо компилируются; проблема только кажется fprintf

Я попытался создать программу barebones, чтобы проиллюстрировать проблему. Надеюсь, поможет. Надеюсь, тот факт, что это проект CodeLite, не будет источником раздражения. Если я могу предоставить дополнительную информацию или код, пожалуйста, спросите.

1 ответ

Обычно это происходит в MinGW при связывании с dll файл, который также имеет файл в виде <NAME>.dll.a Чтобы это исправить, просто сделайте ссылку на dll напрямую (недавно я столкнулся с той же проблемой при сборке LLDB отладчик на Windows / W MinGW, решение было связать непосредственно с dll файл и удалите dll.a файл

Другие вопросы по тегам