我想将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库以在其中使用它?
答案 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
标志,第二种方式是静态编译库,但明确设置给定标志。