Robotics StackExchange | Archived questions

CMake Install Targets

I have a project with one executable and multiple libraries. When installing this package, I get a shared libraries error:

/opt/ros/hydro/lib/handle_detector/localization: error while loading shared libraries: libaffordances_lib.so: cannot open shared object file: No such file or directory. 

Now, I have added the libraries as install targets to the CMakeLists.txt, but I'm still wondering whether it is correct.

cmake_minimum_required(VERSION 2.8.3)
project(handle_detector)

find_package(catkin REQUIRED COMPONENTS 
    eigen_conversions 
  geometry_msgs 
    message_generation 
  roscpp 
    pcl_ros
  pcl_conversions
  std_msgs 
    tf
    tf_conversions
  visualization_msgs)

find_package(LAPACK REQUIRED)

find_package(Eigen REQUIRED)
include_directories(${Eigen_INCLUDE_DIRS})

set(CMAKE_CXX_FLAGS "-DNDEBUG -O3 -fopenmp")

add_message_files(
  FILES
  CylinderMsg.msg
  CylinderArrayMsg.msg
  HandleListMsg.msg
)

generate_messages(DEPENDENCIES geometry_msgs)

catkin_package(
  LIBRARIES 
    ${PROJECT_NAME}
  CATKIN_DEPENDS 
    eigen_conversions 
    geometry_msgs 
    message_generation 
    roscpp 
    pcl_ros
    pcl_conversions
    std_msgs 
    tf
    tf_conversions
    visualization_msgs
 DEPENDS 
  Eigen
  LAPACK)

include_directories(${catkin_INCLUDE_DIRS})

add_executable(localization src/localization.cpp)

add_library(affordances_lib src/affordances.cpp)
add_library(visualizer_lib src/visualizer.cpp)
add_library(messages_lib src/messages.cpp)
add_library(cylindrical_shell_lib src/cylindrical_shell.cpp)

add_dependencies(messages_lib ${PROJECT_NAME}_gencpp)

target_link_libraries(localization ${catkin_LIBRARIES})
target_link_libraries(localization affordances_lib)
target_link_libraries(localization visualizer_lib)
target_link_libraries(localization messages_lib)

target_link_libraries(affordances_lib ${catkin_LIBRARIES})
target_link_libraries(affordances_lib cylindrical_shell_lib)
target_link_libraries(affordances_lib lapack)

target_link_libraries(messages_lib ${catkin_LIBRARIES})

install(TARGETS localization affordances_lib visualizer_lib messages_lib cylindrical_shell_lib
  ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
  LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
  RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

install(DIRECTORY launch/
  DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/launch)

Asked by atp on 2014-04-08 11:30:07 UTC

Comments

That looks reasonable. I would start troubleshooting by trying to confirm that all of your libraries are actually getting installed into the lib directory.

Asked by ahendrix on 2014-04-08 11:58:59 UTC

I'm wondering whether the LIBRARIES ${PROJECT_NAME} is actually correct in your catkin_package(..) call. You do specify a number of library targets, but none of them have the name of your project (ie: handle_detector).

Asked by gvdhoorn on 2014-04-08 21:31:21 UTC

So, e.g., the line add_library(affordances_lib src/affordances.cpp) would become add_library(${PROJECT_NAME}affordances src/affordances.cpp), right? And I would have to change all other places where this library is used in the CMakeLists.txt?

Asked by atp on 2014-04-09 08:59:35 UTC

For now, I would just remove the LIBRARIES ${PROJECT_NAME} from your catkin_package call.

Asked by ahendrix on 2014-04-09 09:42:24 UTC

@atp: I'd follow @ahendrix advice: just remove that line for now and try to get your package working first.

Asked by gvdhoorn on 2014-04-11 06:48:17 UTC

I did remove it yesterday. Thanks for the advice!

Asked by atp on 2014-04-11 08:43:25 UTC

If this is resolved for you, can you post a answer to that effect? Thanks!

Asked by William on 2014-04-21 07:45:24 UTC

Answers