【问题标题】:lnk2001 error in VS trying to use the Bullet physics libraryVS 尝试使用 Bullet 物理库时出现 lnk2001 错误
【发布时间】:2020-08-10 18:52:36
【问题描述】:

我是 C++、Visual Studio (2019) 和 Bullet (2.89) 的新手。 在过去的几天里,我一直在尝试从 Bullet 构建 Hello_World.cpp,但我遇到了这 5 个链接错误:

1>Hello_World.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall btCollisionShape::getBoundingSphere(class btVector3 &,float &)const " (?getBoundingSphere@btCollisionShape@@UBEXAAVbtVector3@@AAM@Z)
1>Hello_World.obj : error LNK2001: unresolved external symbol "public: virtual float __thiscall btCollisionShape::getAngularMotionDisc(void)const " (?getAngularMotionDisc@btCollisionShape@@UBEMXZ)
1>Hello_World.obj : error LNK2001: unresolved external symbol "public: virtual float __thiscall btCollisionShape::getContactBreakingThreshold(float)const " (?getContactBreakingThreshold@btCollisionShape@@UBEMM@Z)
1>Hello_World.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall btConvexShape::project(class btTransform const &,class btVector3 const &,float &,float &,class btVector3 &,class btVector3 &)const " (?project@btConvexShape@@UBEXABVbtTransform@@ABVbtVector3@@AAM2AAV3@3@Z)
1>Hello_World.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall btSphereShape::calculateLocalInertia(float,class btVector3 &)const " (?calculateLocalInertia@btSphereShape@@UBEXMAAVbtVector3@@@Z)

还有其他人遇到此问题或类似问题,但没有得到答案或对我不起作用。

设置:

  • 我使用 premake 来设置 VS 解决方案,Bullet 被组织在静态库中(作为具有编译为 lib 文件的源代码的项目),我现在正在尝试将它们与应用程序项目链接。
  • 所有项目都使用静态链接(用于调试)。
  • 我已将所有项目符号项目引用到我的项目中。
  • 我什至从子弹静态链接到 lib 文件(链接器显然可以看到这些文件,我什至尝试给出绝对路径)
  • 据我所知,函数存在并且在 .cpp 和 .h 文件中具有相同的签名

如果您需要更多详细信息,请告诉我。

(我可能得到的一个线索是关于不同的 bt_double_precision?但这可能不是,我能找到的唯一想法是使用不同精度的浮点模型。但相同并没有做任何事情)

提前致谢!

编辑: 我认为这个答案不适用于我

What is an undefined reference/unresolved external symbol error and how do I fix it?

编辑: 也许值得一提:项目的文件结构真的很奇怪(由premake决定):

  • 解决方案和项目文件位于:bullet3-2.89\build3\vs2010
  • 高级头文件(这些是 Hello_World 使用的包含其他头文件的文件):bullet3-2.89\src
  • 源文件和头文件是bullet3-2.89\src的子目录
  • 库:bullet3-2.89\bin 但所有头文件都在其包含中使用正确的相对路径,我已将项目的包含和库目录设置为这些位置

【问题讨论】:

  • 这五个函数是唯一找不到的,还是还有更多?
  • 这五个都声明为const。但也许图书馆是在他们不是const 的情况下建立的。尝试从头文件中删除const,看看会发生什么。如果更改不能解决问题,请撤消更改。
  • @Dialectus 这些是 Hello_World.cpp 的唯一函数,但如果我从 Bullet 调用更多函数,可能会有更多函数
  • @Dialectus 我从源文件开始编译库,源文件和头文件中的 const 匹配

标签: c++ static-linking bullet lnk2001


【解决方案1】:

我找到了解决方法。只是要劫持 Bullet 中的一个示例项目并使用它。他们似乎比我更擅长 VS 设置:D 不管怎样,谢谢你的建议。

【讨论】:

    【解决方案2】:

    遇到了同样的问题,只有少数功能没有链接。

    这很可能是因为 Bullet 库是使用 BT_USE_DOUBLE_PRECISION 构建的,这意味着所有 btScaler 都将是 double 类型。

    但包含的库没有BT_USE_DOUBLE_PRECISION,这意味着程序将尝试链接函数的浮点版本。
    但它们不存在,因为构建的版本使用双打。

    【讨论】:

      猜你喜欢
      • 2017-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多