Я создаю приложение Windows OpenGL с поддержкой физики пули. Моя настройка среды разработки:
Мое приложение имеет две конфигурации: Win32 и x64. Здесь мой шаг по созданию приложения Windows:
Теперь, когда я создаю свое решение для обеих конфигураций (например, Batch Build для Win32 и x64), все строит правильно, за исключением:
x64 Release - с ошибками:
BulletCollision_vs2010_x64_debug.lib(btDefaultCollisionConfiguration.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in stdafx.obj
Win32 Release - с ошибками:
Win32_Window.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall btConvexInternalShape ...
Win32 Debug - с ошибками:
Win32_Window.obj : error LNK2019: unresolved external symbol "public: __thiscall btRigidBody
Окончательное сообщение - Сборка: 13 удачных, 3 неудачных
Я следую этой помощи для создания моего проекта Visual Studio:
Примечание. Если я использую CMAKE для создания решений VisualStudio для BulletPhysics, а затем привязываю их отдельно к моему приложению Windows для каждой архитектуры процессора, то он строит правильно (например, Build для Win32 и x64 отдельно).
Могу ли я сделать эту работу только с одним решением Visual Studio?
В x64 Release
вы пытаетесь связать статическую библиотеку компилируется в режиме отладки (BulletCollision_vs2010_x64_
debug
.lib
) с объектными файлами из приложения компилируется в режиме релиза (stdafx.obj
специально). _ITERATOR_DEBUG_LEVEL
компилятора (_ITERATOR_DEBUG_LEVEL
) ваших объектных файлов и параметры компилятора lib не совпадают (значения 0
для выпуска и 2
для отладки соответственно). Вот почему связь не удалась. И в случаях Win32 Release
Win32 Debug
и Win32 Release
похоже, вы вообще не связываете библиотеки.
Я думаю, что ссылки на проекты ошибочно.
На мой взгляд, в то время как "ссылки на проекты" хороши для стиля С# модулей, в отечественном развитии это больше похоже на ненужное усложнение вещей. Просто добавьте простые старые библиотеки в линкеровую запись явно, например:
..\..\lib\BulletDynamics_vs2010_x64_debug.lib
..\..\lib\BulletCollision_vs2010_x64_debug.lib
..\..\lib\LinearMath_vs2010_x64_debug.lib
Измените части "debug" и "x64" соответственно для каждой конфигурации. Я думаю, что он более надежный.
BulletDynamics
, BulletCollision
и LinearMath
в "зависимости проекта" для вашего проекта приложения. Это гарантирует, что пуля будет создана до вашего приложения. Установите флажок "Порядок сборки", чтобы убедиться, что сборки идут в правильном порядке.Build->Configuration manager
> для всех "Конфигурации решений" и всех "Платформы решений" (выпадающие списки выше) проверьте правильность конфигураций проектов и платформ. (т.е. у вас нет проектов, которые используют debug при переключении решения на выпуск и наоборот)