построить Bullet Physics для нескольких архитектур в Visual Studio

0

Я создаю приложение Windows OpenGL с поддержкой физики пули. Моя настройка среды разработки:

  • ОС: Windows 7 SP1 64 бит
  • IDE; Visual Studio 2010 SP1
  • BulletPhysics - bullet-2.82-r2704

Мое приложение имеет две конфигурации: Win32 и x64. Здесь мой шаг по созданию приложения Windows:

  1. Сначала я запускаю файл vs2010.bat в "bullet-2.82-r2704\build".
  2. Я добавляю файлы проекта из папки vs2010, созданной с помощью шага 1, в мое визуальное студийное решение.
  3. Добавить зависимости проекта для BulletDynamics, BulletCollision и LinearMath
  4. Добавьте ссылки для всех библиотек thee bullet.

Теперь, когда я создаю свое решение для обеих конфигураций (например, 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:

http://bulletphysics.org/mediawiki-1.5.8/index.php/Creating_a_project_from_scratch#Create_a_new_Visual_Studio_project

Примечание. Если я использую CMAKE для создания решений VisualStudio для BulletPhysics, а затем привязываю их отдельно к моему приложению Windows для каждой архитектуры процессора, то он строит правильно (например, Build для Win32 и x64 отдельно).

Могу ли я сделать эту работу только с одним решением Visual Studio?

Теги:
visual-studio
visual-c++
bulletphysics

1 ответ

3
Лучший ответ

В x64 Release вы пытаетесь связать статическую библиотеку компилируется в режиме отладки (BulletCollision_vs2010_x64_ debug .lib) с объектными файлами из приложения компилируется в режиме релиза (stdafx.obj специально). _ITERATOR_DEBUG_LEVEL компилятора (_ITERATOR_DEBUG_LEVEL) ваших объектных файлов и параметры компилятора lib не совпадают (значения 0 для выпуска и 2 для отладки соответственно). Вот почему связь не удалась. И в случаях Win32 Release Win32 Debug и Win32 Release похоже, вы вообще не связываете библиотеки.

Я думаю, что ссылки на проекты ошибочно.

  1. На мой взгляд, в то время как "ссылки на проекты" хороши для стиля С# модулей, в отечественном развитии это больше похоже на ненужное усложнение вещей. Просто добавьте простые старые библиотеки в линкеровую запись явно, например:

    ..\..\lib\BulletDynamics_vs2010_x64_debug.lib
    ..\..\lib\BulletCollision_vs2010_x64_debug.lib
    ..\..\lib\LinearMath_vs2010_x64_debug.lib
    

    Измените части "debug" и "x64" соответственно для каждой конфигурации. Я думаю, что он более надежный.

  2. Добавьте BulletDynamics, BulletCollision и LinearMath в "зависимости проекта" для вашего проекта приложения. Это гарантирует, что пуля будет создана до вашего приложения. Установите флажок "Порядок сборки", чтобы убедиться, что сборки идут в правильном порядке.
  3. Дважды проверьте, что параметры компилятора одинаковы для каждого модуля.
  4. В < Build->Configuration manager > для всех "Конфигурации решений" и всех "Платформы решений" (выпадающие списки выше) проверьте правильность конфигураций проектов и платформ. (т.е. у вас нет проектов, которые используют debug при переключении решения на выпуск и наоборот)
  5. Все еще не удается? Взгляните на примеры приложений Bullet, например "App_HelloWorld". Сравните его параметры с параметрами вашего приложения, и вы обязательно найдете источник ошибок.
  6. Возможно, вы могли бы сделать это по-другому: добавьте проект приложения в решение Bullet (удалите ненужные вещи), чтобы узнать, работает ли он.
  • 0
    Похоже, это неверные конфигурации проекта. Эта опция командной строки передается компоновщику.
  • 0
    pastebin.com/Qb9Y0zAz

Ещё вопросы

Сообщество Overcoder
Наверх
Меню