2016-03-28 13 views
0

Bulletライブラリは、2つの凸包間の衝突検出にのみ使用します。私の問題は、私のプロジェクトでライブラリをリンクし、CMakeLists.txtで指定する方法です。LinuxのC++プロジェクトでBulletを使用

Bulletライブラリをインストールする方法がわかりません。 repoをフォルダにクローンし、ビルドフォルダを作成し、cmakeでコンパイルしてインストールしました。私はCMakeLists.txtに追加することによって、自分のプロジェクトにライブラリをリンクしてみました:

find_package(Bullet REQUIRED) 
include_directories(${BULLET_INCLUDE_DIR}) 

LINK_LIBRARIES(
BulletDynamics BulletCollision 
) 

私は私のプロジェクトにヘッダを追加するときにこれはまた、正常に動作します。しかし、私は弾丸ライブラリのいくつかの機能を使用する場合、私は次のコンパイルエラーが表示されます。

/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の私の知識とこのものは非常に基本的です)。 はまた、私は、ライブラリがプロジェクトに含まれ、その後にコンパイルする必要があることをどこかで見つかったので、私のプロジェクト構造は、このいずれかです。

test.cppmy_algorithm.hで定義されたクラスを使用するソースファイルですが、私が持っている
/trunk 
    CMakeLists.txt 
    Findmy_project.cmake 
    /bin 
    /build 
    /src 
     /examples 
      CMakeLists.txt 
      test.cpp 
     my_algorithm.cpp 
     my_algorithm.h 
     CMakeLists.txt 

Bulletライブラリをどのようにプロジェクトにリンクさせるのか分かりません。

私の質問は要約です:どのように私のC + +プロジェクトでそれを使用するには、Bulletライブラリをリンクする必要がありますとインストールするには?

+0

「私もどこかに見つかりました...」 - これはもう1つの問題を開始します。これは最初のものと少しは関連しています(Bulletのライブラリとのリンクエラーです)。 **問題ごとに** 1つの質問ポストを持つ方が良いです。そのため、すべての問題に対して最良の回答を集めることができます。 – Tsyvarev

+0

私の質問はちょうど1つです、私はちょうど私が次の2つの "パス"を提示しました。 – CabaIT

答えて

1

リンカのエラーメッセージに示すように、Bulletライブラリを-fPICでコンパイルする必要があります。

どちらか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フラグが有効になっているライブラリを、共有されます最初の方法、ライブラリを静的にコンパイルするが、与えられたフラグを明示的に設定する2番目の方法です。

+0

ありがとう、それはcmakeで動作します-DBUILD_SHARED_LIBS = on CabaIT

関連する問題