2016-05-24 7 views
-1

Я пытаюсь использовать набор инструментов symbolicC++ с catkin. С большим проектом я имею структуру:symbolicC++ build error in ros 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"); }; 

Пакет всей сережки можно найти здесь: 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

Вы применили ответ? Похоже, ты этого не сделал! Он не будет работать с двумя cpp вместе друг с другом! – Vtik

ответ

1

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

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

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 

Это будет работать нормально.

+0

Большое спасибо за ваш быстрый ответ. По мере того как вы просили я предоставил весь пакет catkin в https://www.dropbox.com/s/dc1s6ypdzh56o7i/symbolic.zip?dl=0 Я попробовал ваше предложение, но symbolicC++ - это не только заголовки, что означает, что он не находит некоторые определения функций. Моя предыдущая попытка состояла в том, чтобы создать библиотеку symbolicC++ в CMakeLists. Вы можете найти код в предоставленном образце. Там я, к сожалению, получил ошибку нескольких определений ?! Было бы очень мило с вашей стороны, если бы вы могли взглянуть на пакет. Большое вам спасибо за вашу помощь. – DentOpt

+1

см. Редактирование ответа. – Vtik

+0

Человек, ты меня убиваешь. Большое спасибо. Он работает – DentOpt