2016-05-24 3 views
-1

私はcatkinでsymbolicC++ツールボックスを使用しようとしています。私は構造を持っている大きなプロジェクトを :ros catkinのsymbolicC++ビルドエラー

//main2.cpp 
#include "someheader.h" 
int main(){ 
    Symbol a; 
    Symbolicclass b(a); 
    b.func(); 
} 

//someheader.h 
#ifndef SOMEHEADER_H 
#define SOMEHEADER_H 
    #include "symbolicclass.h" 
#endif 

//symbolicclass.h 
#ifndef SYMBOLICCLASSHEADER_H 
#define SYMBOLICCLASSHEADER_H 
    #include "symbolicc++.h" 
    using namespace std; 

    class Symbolicclass{ 
     Symbolic value; 
     public: 
      void func(); 
      Symbolicclass(Symbolic _value){value=_value;}; 
    }; 
#endif 

//symbolicclass.cpp 
#include "symbolicclass.h" 
void Symbolicclass::func(){ printf("whatever"); }; 

全体尾状花パッケージは、ここで見つけることができます: https://www.dropbox.com/s/4khoagm3uhsbs31/symbolic.zip?dl=0 その34MB、それはsymbolicC++ライブラリを含んでいるよう。

SymbolicC++ライブラリに複数の定義エラーがありますか?例:

/home/Projects/SymbolicPlatform/Catkin/src/symbolic/thirdparty/SymbolicC++3-3.35/headers/symbolic/functions.h:1105: multiple definition of `Kronecker::Kronecker(Kronecker const&)' 
CMakeFiles/symbolic_node.dir/src/main.cpp.o:/home/Projects/SymbolicPlatform/Catkin/src/symbolic/thirdparty/SymbolicC++3-3.35/headers/symbolic/functions.h:1105: first defined here 

CMakeFiles/symbolic_node.dir/src/symbolic_agent.cpp.o: In function `Kronecker::Kronecker(Symbolic const&, Symbolic const&)': 
/home/Projects/SymbolicPlatform/Catkin/src/symbolic/thirdparty/SymbolicC++3-3.35/headers/symbolic/functions.h:1107: multiple definition of `Kronecker::Kronecker(Symbolic const&, Symbolic const&)' 
CMakeFiles/symbolic_node.dir/src/main.cpp.o:/home/Projects/SymbolicPlatform/Catkin/src/symbolic/thirdparty/SymbolicC++3-3.35/headers/symbolic/functions.h:1107: first defined here 

など CMakeListsでの唯一の違いは次のとおりです。

add_executable(symbolic_node src/main1.cpp) //WORKING FOR SIMPLE EXAMPLE 

add_executable(symbolic_node src/main2.cpp src/symbolicclass.cpp)//CRAZY ERRORS 

あなたが問題になる可能性があるものを任意のアイデアを持っていますか? 私には複数定義のエラーが出るのは意味がありませんが、#include "symbolicC++。h"を一度使用していますか? 私はこのエラーがCMakeListsにあると思います。 私はsymbolicC++ライブラリをビルドしてプロジェクトに追加します。 ご協力いただきありがとうございます!

+0

答えを適用しましたか?あなたがしなかったように見える!お互いに沿って2つのcppで動作しません! – Vtik

答えて

1

[OK]を、私はROSに尾状花で使用、それでは、ステップ・バイ・ステップ、それに取得してみましょう++ symboliccについてもっと詳しく説明しますと思う:

1 - ヘッダーだけライブラリ(ないビルド済みをダウンロードし、それは次のようになりますそこにいくつかのバグがあります)。hereから、どこかに抽出してください。含まに

set(CMAKE_CXX_FLAGS "-fno-elide-constructors") 

とヘッダフォルダを追加します: -

2 CMakeLists.txtに次の行を追加します

include_directories(include ${catkin_INCLUDE_DIRS} /path_to/SymbolicC++3-3.35/headers/) 

-3 - あなたはライブラリが必要な場合は、単にそれを追加ヘッダー/ソースのインクルードには次のようになります。

#include "symbolicc++.h" 

これはすべて完了する必要があります。

今、あなたの問題を考慮すると、ちょうどこれにadd_executableを変更します。

add_executable(symbolic_node src/main2.cpp) //remove src/symbolicclass.cpp 

それだけで正常に動作します。

+0

ありがとうございました。あなたがリクエストしたように、私はhttps://www.dropbox.com/s/dc1s6ypdzh56o7i/symbolic.zip?dl=0でcatkinパッケージ全体を提供しました。私はあなたの提案を試みましたが、symbolicC++はヘッダーだけでなく、彼が見つけられないことを意味しますいくつかの関数定義。私の以前の試みは、CMakeListsにsymbolicC++ライブラリを構築することでした。提供されたサンプルでコードを見つけることができます。私は残念ながら、複数の定義のエラーを取得する!もしあなたがパッケージを見れば、あなたのことはとても親切でしょう。ご協力いただきありがとうございます。 – DentOpt

+1

答えの編集を参照してください。 – Vtik

+0

男、あなたは私を殺しています。どうもありがとう。それは働いている – DentOpt

関連する問題