У меня есть рабочее пространство C ++ ROS, в котором я создал статическую библиотеку, которую я хотел бы использовать из разных проектов (пакетов ROS).
Однако, похоже, я что-то упустил в файле CMakeListsбиблиотека, которую я создал, поскольку при попытке выполнить статический метод из моей библиотеки я получаю следующую ошибку:
/opt/ros/kinetic/lib/nodelet/nodelet: symbol lookup error: /catkin_ws/devel/lib//libmy_nodelet.so: undefined symbol: _ZN14my_commons9MyLog6ROSLogEiNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_
Моя библиотека довольно проста.содержит 2 основные папки: include
, который включает в себя файл MyLogger.hpp
и src
, который содержит MyLogger.cpp
Вот файл CMakeLists.txt:
cmake_minimum_required(VERSION 2.8.3)
project(my_commons)
set(CMAKE_CXX_FLAGS "-std=c++0x ${CMAKE_CXX_FLAGS}")
find_package(catkin REQUIRED COMPONENTS
roscpp
)
catkin_package(CATKIN_DEPENDS
INCLUDE_DIRS include)
include_directories(
${catkin_INCLUDE_DIRS}
include/
)
###########
## Build ##
###########
add_library(my_commons
src/MyLog.cpp
)
## Specify libraries to link a library or executable target against
set_target_properties(my_commons PROPERTIES LINKER_LANGUAGE CXX)
target_link_libraries(my_commons
${catkin_LIBRARIES}
${roscpp_LIBRARIES}
)
#add_dependencies(name_of_package_nodelet)
install(DIRECTORY include/
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
FILES_MATCHING PATTERN "*.h"
PATTERN ".svn" EXCLUDE)
# Install library
install(TARGETS my_commons
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
в пакетах, гдеЯ хочу использовать его, я добавляю my_commons
в target_link_libraries
Что мне не хватает?
Большое спасибо заранее за вашу помощь.