【问题标题】:Use Bullet in my c++ project in Linux在我的 Linux 中的 c++ 项目中使用 Bullet
【发布时间】:2016-03-28 15:53:18
【问题描述】:

我只想将 Bullet 库用于两个凸包之间的碰撞检测。我的问题是如何在我的项目中链接库并在 CMakeLists.txt 中指定。

我不太了解如何安装 Bullet 库。我在一个文件夹中克隆了repo,创建了一个构建文件夹,用cmake编译并安装了它。我试图通过添加 CMakeLists.txt 将库链接到我的项目:

find_package( Bullet REQUIRED )
include_directories(${BULLET_INCLUDE_DIR} )

LINK_LIBRARIES(
 BulletDynamics BulletCollision
)

当我在我的项目中添加标题时,这也可以正常工作。但是当我使用 Bullet 库的某些功能时,会出现以下编译错误:

/usr/bin/ld: /usr/local/lib/libBulletDynamics.a(btTypedConstraint.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC

我试图用谷歌搜索它以解决问题,但我无法解决它(我对 CMake 和这些东西的了解非常基础)。 另外我在某处发现该库应该包含在项目中然后编译,所以我的项目结构是这样的:

/trunk 
    CMakeLists.txt
    Findmy_project.cmake
    /bin
    /build
    /src
       /examples
          CMakeLists.txt
          test.cpp
       my_algorithm.cpp
       my_algorithm.h
       CMakeLists.txt

其中test.cpp 是使用my_algorithm.h 中定义的类的源文件,但我现在不知道如何将Bullet 库链接到项目。

所以我的问题总结如下:我必须如何链接以及在哪里安装 Bullet 库才能在我的 c++ 项目中使用它?

【问题讨论】:

  • Also I found somewhere ... - 这引发了 另一个 问题,这与第一个问题有点相关(关于与 Bullet 库链接的错误)。最好每个问题发布一个问题,这样您就可以为每个问题收集最佳答案。
  • 我的问题只是一个,我只是提出了两条我试图遵循的“路径”,我只想使用该库,无论哪种解决方案都适合我。

标签: c++ linux cmake collision-detection bulletphysics


【解决方案1】:

您需要使用-fPIC 编译 Bullet 库,如链接器的错误消息所述。

使用 CMake 变量 BUILD_SHARED_LIBS 设置此库:

cmake -DBUILD_SHARED_LIBS=on <source-dir>

或使用 CMake 变量 CMAKE_POSITION_INDEPENDENT_CODE 设置:

cmake -DCMAKE_POSITION_INDEPENDENT_CODE=on <source-dir>

您将获得共享库的第一种方式,始终启用-fPIC 标志,第二种方式您将静态编译库,但显式设置给定标志。

【讨论】:

  • 谢谢,它适用于 cmake -DBUILD_SHARED_LIBS=on
猜你喜欢
  • 2018-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多