Я разрабатываю надстройки для симулятора космического полета под названием Orbiter: http://orbit.medphys.ucl.ac.uk/
Он принимает плагины как файлы dll. Недавно я сделал плагин, который также использует физическую библиотеку Bullet. Он статически связан с dll, поэтому библиотека bullet сама по себе не является dll, а скомпилирована прямо в плагин. Bullet скомпилирован с опцией многопоточной (/ MT) для выпуска и многопоточной отладкой (/ MTd) для отладки
Теперь я хочу использовать потоки от Boost. Поэтому я установил статические библиотеки Boost, выбрав 2 статических параметра в установщике Boost Pro. Мне удалось успешно создать приложение Win 32 с этими статическими библиотеками. Приложение также использовало многопоточность (/ MT). Так что я знаю, что на флагах нет несовпадений.
Тем не менее, когда я добавляю Boost в свой проект плагина Orbiter dll, в котором также есть Bullet, я получаю ошибку ссылки:
1> ------ Сборка началась: Проект: Bump, Конфигурация: Выпуск Win32 ------
1> C: \ Program Files (x86) \ MSBuild \ Microsoft.Cpp \ v4.0 \ Microsoft.CppBuild.targets (990,5): предупреждение MSB8012: TargetPath (F: \ Orbiter \ Orbitersdk \ samples \ BumpThreaded \ Release \ Bump.dll) не соответствует значению свойства OutputFile компоновщика (F: \ Orbiter \ Modules \ Plugin \ Bump.dll). Это может привести к неправильной сборке вашего проекта. Чтобы исправить это, убедитесь, что значения свойств $ (OutDir), $ (TargetName) и $ (TargetExt) соответствуют значению, указанному в% (Link.OutputFile).
1> MSVCRT.lib (ti_inst.obj): ошибка LNK2005: «private: __thiscall type_info :: type_info (class type_info const &)» (?? 0type_info @@ AAE @ ABV0 @@ Z) уже определено в LIBCMT.lib (typinfo .obj)
1> MSVCRT.lib (ti_inst.obj): ошибка LNK2005: «private: class type_info & __thiscall type_info :: operator = (class type_info const &)» (?? 4type_info @@ AAEAAV0 @ ABV0 @@ Z) уже определено в LIBCMT .lib (typinfo.obj) 1> Создание библиотеки F: \ Orbiter \ Orbitersdk \ samples \ BumpThreaded \ Release \ Bump.lib и объекта F: \ Orbiter \ Orbitersdk \ samples \ BumpThreaded \ Release \ Bump.exp
1> ССЫЛКА: предупреждение LNK4098: defaultlib 'MSVCRT' конфликтует с использованием других библиотек; используйте / NODEFAULTLIB: library 1> ...... \ Modules \ Plugin \ Bump.dll: фатальная ошибка LNK1169: найден один или несколько многократно определенных символов
========== Сборка: 0 успешных, 1 неудачных, 3 обновленных, 0 пропущенных ==========
Судя по тому, что я читал по другим вопросам, это может быть связано с несоответствием флагов для двух библиотек, используемых в приложении. Но здесь дело обстоит не так. И Bullet, и Boost скомпилированы с / MT.
Также boost работает нормально с обычным приложением win 32, так почему проблема при его статической компоновке для вывода dll?
Я использую Visual Studio 2010 Express и имею 64-битную систему Windows 7.
Спасибо за любую помощь заранее :)