我只想将 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/