я разрабатываю аддоны для космического полета симулятора под названием Orbiter: http://orbit.medphys.ucl.ac.uk/Компиляция физики пули и увеличить вместе как статические библиотеки
Он принимает плагин как DLL-файлы. Недавно я создал плагин, который также использует библиотеку физики Bullet. Его статически связана с dll, поэтому библиотека пули сама по себе не является dll, а компилируется прямо в плагин. Bullet скомпилирован с многопоточным (/ MT) вариантом для выпуска и многопоточным Debug (/ MTd) для отладки
Теперь я хочу использовать потоки из Boost. Поэтому я установил статические библиотеки Boost, выбрав 2 статических параметра из установщика Boost Pro. Я смог успешно создать приложение Win 32 с этими статическими библиотеками. Приложение также использовало Multi-threaded (/ MT). Поэтому я знаю, что на флагах нет рассогласования.
Тем не менее, когда я добавляю подталкивание к моему Orbiter длл плагина проекту, который также имеет Пули, я получаю ошибку ссылки:
1> ------ Сложение начал: Проект: Bump, Конфигурация: Release 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: "частное: __thiscall type_info :: type_info (класс type_info сопзЬ &)" (?? 0type_info @@ AAE @ ABV0 @@ Z) уже определены в LIBCMT .lib (typinfo.obj)
1> msvcrt.lib (ti_inst.obj): ошибка LNK2005: "частный: класс type_info & __thiscall type_info :: оператор = (класс type_info сопзЬ &)" (?? 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> LINK: предупреждение LNK4098: defaultlib 'MSVCRT' конфликтует с использованием других libs; use/NODEFAULTLIB: библиотека 1> ...... \ Modules \ Plugin \ Bump.dll: фатальная ошибка LNK1169: найден один или несколько символов с несколькими значениями
========================== 0 удалось, 1 не удалось, 3 обновлено, 0 пропущено ==========
Из того, что я читал по другим вопросам, это может быть связано с несогласованными флагами для двух библиотек, которые используются в приложение. Но это не так. И Bullet, и Boost скомпилированы с/MT.
Также активирует работу нормально с обычным приложением для побед 32, поэтому почему проблема при связывании его статически для вывода DLL?
Я использую визуальную студию 2010 Express и имею Windows 7 64-битную систему.
Спасибо за любую помощь заранее :)
Ну да, я проверил, установив его в/МТ, а также такую же ошибку.Во всяком случае, я применил класс потоков и барьеры, критический раздел и т. Д., Используя Win32, поэтому я попытаюсь интегрировать Boost позже. –
Одна из библиотек, которые вы связываете, затем * имеет * виноват. Где-то у вас есть lib, который был построен с помощью '/ MD'. Вы можете попробовать деинсталлировать boost, а затем наращивать форсирование из источника, а не устанавливать его. Его довольно легко создать, и его действительно не нужно устанавливать. – Fraser