[英]ROS catkin build - cannot find shared library
我正在嘗試創建此ROS包https://github.com/toddhester/rl-texplore-ros-pkg,但是它無法構建“ rl_experiment”並出現以下錯誤:
/usr/bin/ld: cannot find -lagentlib
/usr/bin/ld: cannot find -lenvlib
collect2: error: ld returned 1 exit status
我正在使用ROS Kinetic。 共享庫確實存在於文件夾/texplore/devel/.private/rl_env/lib/和/texplore/devel/.private/rl_agent/lib/中,符號鏈接位於/ texplore / devel / lib /
我嘗試了以下方法:
(1)將/ texplore / devel / lib /導出到LD_LIBRARY_PATH
(2)將符號鏈接添加到/ texplore / src / rl_experiment / src中的庫
(3)將庫路徑添加到target_link_libraries
target_link_libraries(experiment agentlib envlib ${catkin_LIBRARIES}
"/media/usr/texplore/devel/lib/libagentlib.so"
"/media/usr/texplore/devel/lib/libenvlib.so")
(4)設置鏈接器的搜索路徑
SET(CMAKE_EXE_LINKER_FLAGS
"${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath -Wl,/media/usr/texplore/devel/lib/")
沒用 最后,我將符號鏈接添加到/ usr / local / lib並成功了。 但我不希望該文件夾中的符號鏈接。
因此,鏈接器只是不搜索構建樹。 我的問題是,為什么catkin沒有在catkin_LIBRARIES中添加鏈接器路徑? 我之前已經構建了ROS軟件包,但是無法確定為什么這個特定的軟件包不起作用。
我遇到了同樣的問題。 基於ROS Answers上的這篇文章以及catkin_packages宏的通用CMakeLists.txt文件中的以下注釋,我進行了以下更改:
## LIBRARIES: libraries you create in this project that dependent projects also need
我做了一些事情來解決這個問題...
LIBRARIES agentlib
到catkin_packages
宏rl_agent/CMakeLists.txt
文件。 這使agentlib
庫稍后可用於rl_experiment
。 LIBRARIES envlib
到catkin_packages
宏rl_env/CMakeLists.txt
文件。 這使envlib
庫稍后可用於rl_experiment
。 agentlib
和envlib
從target_link_libraries
宏rl_experiment/CMakeLists.txt
文件。 這些不是必需的。 rl_agent
和rl_env
軟件包在rl_experiment/CMakeLists.txt
的find_package
宏中列出。 ...然后一切都成功編譯了。
添加摘要以進一步說明...
...
## Declare a cpp library
# add_library(rgbd_tools
# src/${PROJECT_NAME}/
# )
add_library(agentlib
src/Agent/DiscretizationAgent.cc
src/Agent/QLearner.cc
...
src/newmat/newmatrm.cc
src/newmat/newmat9.cc
)
## Declare a cpp executable
# add_executable(rgbd_tools_node src/rgbd_tools_node.cpp)
...
...
###################################
## catkin specific configuration ##
###################################
...
catkin_package(
INCLUDE_DIRS include
LIBRARIES envlib
# CATKIN_DEPENDS roscpp rospy std_msgs
CATKIN_DEPENDS message_runtime
# DEPENDS system_lib
)
...
...
## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
find_package(catkin REQUIRED COMPONENTS
roscpp
std_msgs
rl_common
rl_env
rl_agent
)
## System dependencies are found with CMake's conventions
# find_package(Boost REQUIRED COMPONENTS system)
...
## Declare a cpp executable
# add_executable(rgbd_tools_node src/rgbd_tools_node.cpp)
add_executable(experiment src/rl.cc)
# target_link_libraries(experiment agentlib envlib ${catkin_LIBRARIES})
target_link_libraries(experiment ${catkin_LIBRARIES})
#add_executable(image_converter src/image_converter.cpp)
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.