Ошибка: множественное определение `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
файл