在Linux中的c ++项目中使用Bullet

时间:2016-03-28 15:53:19

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

我想将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库链接到项目。

所以我的问题是总结:如何在我的c ++项目中链接和安装Bullet库以在其中使用它?

1 个答案:

答案 0 :(得分:1)

您需要使用-fPIC编译Bullet库,因为链接器的错误消息显示。

使用CMake变量BUILD_SHARED_LIBS set:

配置此库
cmake -DBUILD_SHARED_LIBS=on <source-dir>

或使用CMake变量CMAKE_POSITION_INDEPENDENT_CODE设置:

cmake -DCMAKE_POSITION_INDEPENDENT_CODE=on <source-dir>

第一种方法是获得共享库,它们始终启用-fPIC标志,第二种方式是静态编译库,但明确设置给定标志。