c++ - 在我的 Linux C++ 项目中使用 Bullet

标签 c++ linux cmake collision-detection bulletphysics

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

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

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

LINK_LIBRARIES(
 BulletDynamics BulletCollision
)

当我在我的项目中添加 header 时,这也能正常工作。但是当我使用 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++ 项目中使用它?

最佳答案

如链接器的错误消息所述,您需要使用 -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 标志,第二种方式您将静态编译库,但明确设置给定标志。

关于c++ - 在我的 Linux C++ 项目中使用 Bullet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36265886/

相关文章:

c++ - 在不复制 block 的情况下在一个 UDP 消息中发送两个数据 block ?

linux - 通过 ssh 在远程服务器上执行命令

c - 系统调用如何存储在 pt_regs 中?

c++ - 特征矩阵库系数模运算

c++ - Scons 没有指定 CPPPATH,仍然可以检测到 .h 依赖吗?

c++ - 将多个输入从文件C++的一行分开

linux - Anaconda Navigator 无法在 Linux Mint 上启动

c++ - Boost 无法在 Ubuntu 上使用 CMake 正确链接

c++ - 无法在 cmake 中包含外部先前构建的 .a 库

c++ - C++/Qt 应用程序的跨平台持续集成管道