Linux 在我的 C++ 项目中使用 Bullet
Use Bullet in my c++ project in Linux
我只想将 Bullet 库用于两个凸包之间的碰撞检测。我的问题是如何 link 我项目中的库并在 CMakeLists.txt.
中指定
我不太明白如何安装子弹库。我将 repo 克隆到一个文件夹中,创建了一个构建文件夹,用 cmake 编译并安装了它。我试图通过添加 CMakeLists.txt:
将库 link 添加到我的项目中
find_package( Bullet REQUIRED )
include_directories(${BULLET_INCLUDE_DIR} )
LINK_LIBRARIES(
BulletDynamics BulletCollision
)
当我在我的项目中添加 headers 时,这也能正常工作。但是当我使用 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
我试图 google 它以解决问题,但我无法解决它(我对 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
中定义的 class 的源文件,但我现在不知道如何将 Bullet 库 link 添加到项目中.
所以我的问题是总结:我必须如何 link 以及在哪里安装 Bullet 库才能在我的 c++ 项目中使用它?
您需要使用 -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
标志,第二种方式你将静态编译库,但明确设置给定标志。
我只想将 Bullet 库用于两个凸包之间的碰撞检测。我的问题是如何 link 我项目中的库并在 CMakeLists.txt.
中指定我不太明白如何安装子弹库。我将 repo 克隆到一个文件夹中,创建了一个构建文件夹,用 cmake 编译并安装了它。我试图通过添加 CMakeLists.txt:
将库 link 添加到我的项目中find_package( Bullet REQUIRED )
include_directories(${BULLET_INCLUDE_DIR} )
LINK_LIBRARIES(
BulletDynamics BulletCollision
)
当我在我的项目中添加 headers 时,这也能正常工作。但是当我使用 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
我试图 google 它以解决问题,但我无法解决它(我对 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
中定义的 class 的源文件,但我现在不知道如何将 Bullet 库 link 添加到项目中.
所以我的问题是总结:我必须如何 link 以及在哪里安装 Bullet 库才能在我的 c++ 项目中使用它?
您需要使用 -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
标志,第二种方式你将静态编译库,但明确设置给定标志。