rosic catkin中的symbolicc ++ build error

时间:2016-05-24 16:46:38

标签: build ros catkin symbolicc++

我尝试使用带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"); };

整个catkin包可以在这里找到: https://www.dropbox.com/s/4khoagm3uhsbs31/symbolic.zip?dl=0 它的34Mb,因为它包含symbolicc ++库。

我得到了SymbolicC ++库的多个定义错误? e.g。

/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 ++库并将其添加到项目中。 非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

好的,我想我会更详细地讨论在ROS中使用catkin的symbolicc ++,所以让我们一步一步地进行:

1 - 从here下载唯一的标题库(不是预构建的,看起来像是一些错误)并将其解压缩到某处。

2 - 在CMakeLists.txt中添加以下行:

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

并将headers文件夹添加到includes:

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

它会正常工作。