gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 10:38:28 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com