为Visual Studio中的多个体系结构构建Bullet Physics

时间:2014-08-13 11:22:15

标签: c++ windows visual-studio visual-c++ bulletphysics

我正在构建一个带有子弹物理支持的Windows OpenGL应用程序。 我的开发环境设置是:

  • 操作系统:Windows 7 SP1 64位
  • IDE; Visual Studio 2010 SP1
  • BulletPhysics - bullet-2.82-r2704

我的应用程序有两种配置,即 Win32 x64 。 这是构建Windows应用程序的步骤:

  1. 首先,我在" bullet-2.82-r2704 \ build" 中执行 vs2010.bat 文件。
  2. 我将第1步创建的 vs2010 文件夹中的项目文件添加到我的visual studio解决方案中。
  3. BulletDynamics BulletCollision LinearMath
  4. 添加项目依赖项
  5. 为所有子弹库添加引用。
  6. 现在,当我为这两种配置构建我的解决方案(即 Win32 x64 的批量构建)时,除了以下内容之外,所有内容都正确构建:

    x64发布 - 错误如:

        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发布 - 错误如:

        Win32_Window.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall btConvexInternalShape ...
    

    Win32调试 - 错误如:

        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为BulletPhysics构建VisualStudio解决方案,然后将它们分别链接到我的Windows应用程序以用于每个CPU架构,那么它构建正确(即构建 Win32 x64 分开)。

    有没有什么方法可以让我只使用一个Visual Studio解决方案?

1 个答案:

答案 0 :(得分:3)

x64 Release中,您尝试将以调试模式(BulletCollision_vs2010_x64_ debug .lib)编译的静态库与您的目标文件相关联在发布模式下编译的应用程序(具体为stdafx.obj)。目标文件的编译器选项(_ITERATOR_DEBUG_LEVEL)和lib的编译器选项不匹配(值0表示发布,2表示调试。这就是链接失败的原因。在Win32 DebugWin32 Release个案例中,您似乎根本没有链接库。

我认为项目引用方式错误。

  1. 在我看来,"项目参考"对于C#样式的模块是有好处的,在本机开发中它更像是不必要的复杂事物。只需将纯旧的库明确添加到链接器输入,如下所示:

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

    更改"调试"和" x64"每个配置相应的部件。我认为它更可靠。

  2. BulletDynamicsBulletCollisionLinearMath添加到"项目依赖项"为您的应用程序项目。这将保证在您的应用程序之前构建项目符号。检查"构建订单"选项卡以确保构建顺序正确。
  3. 仔细检查每个模块的编译器选项是否相同。
  4. 在< Build->Configuration manager>适用于所有"解决方案配置"以及所有"解决方案平台" (上面的下拉菜单)检查项目配置和平台是否正确。 (即,当您将解决方案切换到发布时,您没有使用调试的项目,反之亦然)
  5. 仍然失败?看一下示例Bullet应用程序,例如" App_HelloWorld"。将它的选项与您应用的选项进行比较,您肯定会找到错误来源。
  6. 或许,您可以反过来:将您的应用项目添加到Bullet的解决方案中(删除不需要的东西),看它是否有效。