Сбой приложения c ++ при вызове метода из другой библиотеки (ошибка поиска символа) - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть рабочее пространство 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

Что мне не хватает?

Большое спасибо заранее за вашу помощь.

...