Я работаю с тремя различными библиотеками: Core (может быть скомпилирован как статический или DLL), Графика (может быть скомпилирован как статический или DLL - Работа с Ogre), Физика (может быть скомпилировано как статическое только благодаря лицензированию - Havok). Затем проект использует комбинацию библиотек в зависимости от потребностей. Часть Physics зависит от некоторых функций Graphics и Core , в то время как Graphics зависит от некоторых функций ядро . Проект отлично работает со всеми библиотеками, статически связанными в отладке и выпуске. Я получаю следующую ошибку при использовании динамически связанных библиотек Core и Graphics , но статически связанной библиотеки Physics .
Ошибка 1, ошибка LNK2005: "public:
без знака int __thiscall
OgreFW :: FwErrorLog :: GetError (аннулируются)»
(? GetError @ FwErrorLog @ OgreFW @@ QAEIXZ)
уже определено в
FwCore_d_dll.lib (FwCore_d.dll) FwHavok_d.lib
Я вижу, что означает ошибка, но я не совсем понимаю, как ее обойти. Если мои библиотеки зависят друг от друга, как это, и лицензирование физического движка (Havok) допускает только статическое связывание, нужно ли переосмыслить свой дизайн (что является большой проблемой :() или есть способ обойти это?
Спасибо
РЕДАКТИРОВАТЬ: я уже проверил, чтобы убедиться, что все библиотеки скомпилированы с MDd
EDIT2: я могу использовать /FORCE:MULTIPLE
, но это скрывает проблему, а не решает ее
EDIT3: Извинения за несколько правок. Функция GetError () определена в заголовке, если я помещу ее в исходный файл, ошибка компоновки исчезнет. Почему это так?