Ошибка сборки SymbolicC++ в ros catkin

Я пытаюсь использовать панель инструментов symbolicC++ с catkin. С большим проектом у меня есть структура:

//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 Его 34 МБ, поскольку он включает в себя библиотеку 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++ и добавляю ее в проект. Большое спасибо за вашу помощь!

1 ответ

Хорошо, я думаю, что я подробнее остановлюсь на использовании symbolicC++ с catkin в ROS, так что давайте перейдем к этому шаг за шагом:

1 - загрузите сюда единственную библиотеку заголовков (не встроенную, похоже, там есть какие-то ошибки) и извлеките ее куда-нибудь.

2 - в CMakeLists.txt добавьте следующую строку:

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

и добавьте папку заголовков в разделы:

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

Это будет работать просто отлично.

Другие вопросы по тегам