0

я разрабатываю аддоны для космического полета симулятора под названием 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-битную систему.

Спасибо за любую помощь заранее :)

ответ

0

Если вы используете только подталкивание и пуля, и они оба, безусловно, скомпилированные с /MT, то это должно быть вашим сам Bump длл, которая использует /MD.

+0

Ну да, я проверил, установив его в/МТ, а также такую ​​же ошибку.Во всяком случае, я применил класс потоков и барьеры, критический раздел и т. Д., Используя Win32, поэтому я попытаюсь интегрировать Boost позже. –

+0

Одна из библиотек, которые вы связываете, затем * имеет * виноват. Где-то у вас есть lib, который был построен с помощью '/ MD'. Вы можете попробовать деинсталлировать boost, а затем наращивать форсирование из источника, а не устанавливать его. Его довольно легко создать, и его действительно не нужно устанавливать. – Fraser

Смежные вопросы