【问题标题】:Can't link to bullet physics library - LNK2019,LNK2001无法链接到子弹物理库 - LNK2019、LNK2001
【发布时间】:2021-01-14 15:17:20
【问题描述】:

我已经在Windows上使用cmake构建了bullet3-3.08(命令已经从bullet3-3.08目录中创建的build文件夹执行):

cmake -G "Visual Studio 15 2017" -A x64 -D "CMAKE_INSTALL_PREFIX:PATH=C:/MyLibs/bullet3-3.08" -D "USE_MSVC_RUNTIME_LIBRARY_DLL=ON" -D "INSTALL_LIBS=ON" ..
cmake --build . --config Release --parallel 8 --target install

我有一个使用 MD/MDd 运行时库的应用程序,因此我使用以下选项构建了 Bullet:USE_MSVC_RUNTIME_LIBRARY_DLL=ON。 Bullet 默认构建为静态库。我使用 Visual Studio 2017 并使用 cmake 构建我的应用程序。当我链接到 Bullet 时,我收到许多链接器错误(LNK2019、LNK2001),例如:

error LNK2019: unresolved external symbol "public: __cdecl btCollisionDispatcher::btCollisionDispatcher(class btCollisionConfiguration *)" (??0btCollisionDispatcher@@QEAA@PEAVbtCollisionConfiguration@@@Z) referenced in function main
error LNK2001: unresolved external symbol "public: virtual void __cdecl btCollisionShape::getBoundingSphere(class btVector3 &,float &)const " (?getBoundingSphere@btCollisionShape@@UEBAXAEAVbtVector3@@AEAM@Z)

我在 CMakeLists.txt 中使用直接库路径:

target_link_libraries(${executableName} "C:/MyLibs/bullet3-3.08/lib/Bullet3Collision.lib"
                                        "C:/MyLibs/bullet3-3.08/lib/Bullet3Dynamics.lib"
                                        "C:/MyLibs/bullet3-3.08/lib/LinearMath.lib")

这里是 CMakeSettings.json:

{
  "configurations": [
    {
      "name": "x64-Debug",
      "generator": "Ninja",
      "configurationType": "Debug",
      "inheritEnvironments": [
        "msvc_x64_x64"
      ],
      "buildRoot": "${projectDir}\\build\\${name}",
      "installRoot": "${projectDir}\\install\\${name}",
      "cmakeCommandArgs": "",
      "buildCommandArgs": "-v",
      "ctestCommandArgs": ""
    },
    {
      "name": "x64-Release",
      "generator": "Ninja",
      "configurationType": "Release",
      "inheritEnvironments": [
        "msvc_x64_x64"
      ],
      "buildRoot": "${projectDir}\\build\\${name}",
      "installRoot": "${projectDir}\\install\\${name}",
      "cmakeCommandArgs": "",
      "buildCommandArgs": "-v",
      "ctestCommandArgs": ""
    }
  ]
}

怎么了?

【问题讨论】:

    标签: cmake visual-studio-2017 static-libraries static-linking bullet


    【解决方案1】:

    由于 Bullet 提供了一个 BulletConfig.cmake 文件,因此链接到 Bullet 非常简单。

    首先您需要安装 Bullet(如果没有安装)并将-DCMAKE_PREFIX_PATH=C:/MyLibs/bullet3-3.08(或相应的安装目录)添加到您的 cmake 命令行。

    然后在你的 CMakeLists.txt 文件中你需要添加

    find_package(Bullet REQUIRED)
    # your add_executable call follows here
    add_executable(${executableName} .......)
    target_compile_definitions(${executableName} PRIVATE ${BULLET_DEFINITIONS})
    target_include_directories(${executableName} PRIVATE ${BULLET_INCLUDE_DIRS})
    target_link_libraries(${executableName} PRIVATE ${BULLET_LIBRARIES})
    

    这应该是链接到 Bullet 的必要步骤。

    【讨论】:

    • ${BULLET_LIBRARIES} 包含应该链接的库。我已经链接 Bullet3Collision.lib 而不是 BulletCollision.lib
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多