程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ROS CPP Snap7 Linux - CMake 不链接 lib 我安装了库:结果:FindLibSnap7.cmake:CMakeLists.txt:catkin_make 输出:lld 输出大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决ROS CPP SnaP7 Linux - CMake 不链接 lib 我安装了库:结果:FindLibSnaP7.cmake:CMakeLists.txt:catkin_make 输出:lld 输出?

开发过程中遇到ROS CPP SnaP7 Linux - CMake 不链接 lib 我安装了库:结果:FindLibSnaP7.cmake:CMakeLists.txt:catkin_make 输出:lld 输出的问题如何解决?下面主要结合日常开发的经验,给出你关于ROS CPP SnaP7 Linux - CMake 不链接 lib 我安装了库:结果:FindLibSnaP7.cmake:CMakeLists.txt:catkin_make 输出:lld 输出的解决方法建议,希望对你解决ROS CPP SnaP7 Linux - CMake 不链接 lib 我安装了库:结果:FindLibSnaP7.cmake:CMakeLists.txt:catkin_make 输出:lld 输出有所启发或帮助;

我想使用SnaP7(多平台以太网 S7 PLC 通信套件)在 ROS 和西门子 S7 1500 之间建立通信。

我遇到了链接器问题 - 然我可以找到包含和库 .so 文件本身,但使用自定义 FindlibsnaP7.cmake,target_link_librarIEs 没有链接到 snaP7 库。这是我的方法和帮助调试的输出:

(注意:目前我们被迫使用 ROS Kinetic,因此使用 snaP7 Python 包装器似乎不是一个选项,因为它是用 python3 编写的。)

我安装了库:

  • sudo add-apt-repository ppa:gijzelaar/snaP7
  • sudo apt-get update
  • sudo apt-get install libsnaP71 libsnaP7-dev

结果:

$ ll /usr/lib/libsnaP7.so
  -rwxr-xr-x 1 root root 305944 Apr 24 22:18 /usr/lib/libsnaP7.so*
$ ll /usr/include/snaP7.h
  -rw-r--r-- 1 root root 41954 Jun  2  2015 /usr/include/snaP7.h

FindlibsnaP7.cmake:

# find libsnaP7
#
# exports:
#
#   libsnaP7_FOUND
#   libsnaP7_INCLUDE_Dirs
#   libsnaP7_liBRARIES
#

find_package(PkgConfig @R_262_10613@ired)

# Use pkg-config to get hints about paths
#pkg_check_modules(libsnaP7_PKGCONF @R_262_10613@ired libsnaP7)

# Include dir
find_path(libsnaP7_INCLUDE_DIR
  nameS snaP7.h
  PATHS ${libsnaP7_PKGCONF_INCLUDE_Dirs}
)

find_library(
   libsnaP7_liBRARY
   nameS snaP7 libsnaP7
   PATHS /usr/lib
#   PATH_SUFFIXES lib
#   NO_DEFAulT_PATH
)

#FIND_PACKAGE_HANDLE_STANDARD_ARGS(libsnaP7 DEFAulT_MSG libsnaP7_liBRARY libsnaP7_INCLUDE_DIR)

message("libsnaP7_INCLUDE_DIR ${libsnaP7_INCLUDE_DIR}")
message("libsnaP7_liBRARY ${libsnaP7_liBRARY}")

set(libsnaP7_liBRARIES ${libsnaP7_liBRARY})
set(libsnaP7_INCLUDE_Dirs ${libsnaP7_INCLUDE_DIR})
set(libsnaP7_FOUND yes)

# Set the include dir variables and the librarIEs and let libfind_process do the rest.
# NOTE: Singular variables for this library,plural for librarIEs this this lib depends on.
#set(libsnaP7_PROCESS_INCLUDES libsnaP7_INCLUDE_DIR)
#set(libsnaP7_PROCESS_liBS libsnaP7_liBRARY)

CMakeLists.txt:

cmake_minimum_@R_262_10613@ired(VERSION 2.8.3)
project(agv_snaP7_driver)

set(CMAKE_VERBOSE_MAKEfile ON)

## Compile as C++11,supported in ROS Kinetic and newer
add_compile_options(-std=c++11)

##########################################################################################

set(CMAKE_MODulE_PATH ${CR_60_11845@AKE_MODulE_PATH} "${CR_60_11845@AKE_CURRENT_sourcE_DIR}/cmake")
messaGE( STATUS "CMAKE_MODulE_PATH: " ${CR_60_11845@AKE_MODulE_PATH} )

find_package(libsnaP7 @R_262_10613@ired)
include_directorIEs(${libsnaP7_INCLUDE_Dirs})

message("libsnaP7_liBRARIES ${libsnaP7_liBRARIES}")
message("libsnaP7_INCLUDE_Dirs ${libsnaP7_INCLUDE_Dirs}")

##########################################################################################

## Find catkin macros and librarIEs
## if COMPONENTS List like find_package(catkin @R_262_10613@ired COMPONENTS xyz)
## is used,also find other catkin packages
find_package(catkin @R_262_10613@ired COMPONENTS
  roscpp
  nodelet
  agv_utils
  agv_msgs
)

###################################
## catkin specific configuration ##
###################################
## The catkin_package macro generates cmake config files for your package
## Declare things to be passed to dependent projects
## INCLUDE_Dirs: uncomment this if your package contains header files
## liBRARIES: librarIEs you create in this project that dependent projects also need
## CATKIN_DEPENDS: catkin_packages dependent projects also need
## DEPENDS: system dependencIEs of this project that dependent projects also need
catkin_package(
  INCLUDE_Dirs include
  liBRARIES ${PROjeCt_name}
  CATKIN_DEPENDS ${THIS_PACKAGE_ROS_DEPS}
  DEPENDS libsnaP7
  )

###########
## Build ##
###########

## Specify additional LOCATIOns of header files
## Your package LOCATIOns should be Listed before other LOCATIOns
include_directorIEs(
  include
  ${Catkin_INCLUDE_Dirs}
  ${libsnaP7_INCLUDE_Dirs}
  )

## Declare a C++ library
add_library(${PROjeCt_name}
  src/agv_snaP7_driver_config.cpp
  src/agv_snaP7_driver.cpp
  )

## Add cmake target dependencIEs of the executable
add_dependencIEs(${PROjeCt_name} ${${PROjeCt_name}_EXPORTED_TARGETS} ${Catkin_EXPORTED_TARGETS})

## Specify librarIEs to link a library or executable target against
target_link_librarIEs( ${PROjeCt_name} ${Catkin_liBRARIES} ${libsnaP7_liBRARIES})

#############
## Install ##
#############

## Mark librarIEs for installation
 install(TARGETS ${PROjeCt_name}
   ARCHIVE DESTinATION ${CATKIN_PACKAGE_liB_DESTinATION}
   liBRARY DESTinATION ${CATKIN_PACKAGE_liB_DESTinATION}
   RUNTIME DESTinATION ${CATKIN_GLOBAL_BIN_DESTinATION}
 )

## Mark cpp header files for installation
 install(DIRECTORY include/${PROjeCt_name}/
   DESTinATION ${CATKIN_PACKAGE_INCLUDE_DESTinATION}
   fileS_MATCHING PATTERN "*.h"
   PATTERN ".svn" EXCLUDE
 )

install(fileS nodelet.xml
    DESTinATION ${CATKIN_PACKAGE_SHARE_DESTinATION}
  )

install(DIRECTORY launch/
  DESTinATION ${CATKIN_PACKAGE_SHARE_DESTinATION}/launch
  fileS_MATCHING PATTERN "*.launch"
  PATTERN ".svn" EXCLUDE
  )

install(DIRECTORY config/
  DESTinATION ${CATKIN_PACKAGE_SHARE_DESTinATION}/config
  fileS_MATCHING PATTERN "*.yaml"
  PATTERN ".svn" EXCLUDE
  )

catkin_make 输出:

-- +++ processing catkin package: 'agv_snaP7_driver'
-- ==> add_subdirectory(agv_base_harDWare/agv_snaP7_driver)
-- CMAKE_MODulE_PATH: /home/twobit/workspaces/bestvc_ws/branches/Gestamp_AmorebIEta_01/base/src/agv_base_harDWare/agv_snaP7_driver/cmake
libsnaP7_INCLUDE_DIR /usr/include
libsnaP7_liBRARY /usr/lib/libsnaP7.so
libsnaP7_liBRARIES /usr/lib/libsnaP7.so
libsnaP7_INCLUDE_Dirs /usr/include

lld 输出

$ ldd libagv_snaP7_driver.so | grep snap
  libsnappy.so.1 => /usr/lib/x86_64-linux-gnu/libsnappy.so.1 (0x00007fe89c01e000)

如您所见,找到了包含以及库。向 ${libsnaP7_liBRARIES} 提供 target_link_librarIEs 不是重新链接 libsnaP7.so

从源代码安装 snaP7 后,我发现示例 cpp 链接正确。

如果有人知道为什么会出现此错误链接,我很乐意提供帮助。

先谢谢你!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

大佬总结

以上是大佬教程为你收集整理的ROS CPP Snap7 Linux - CMake 不链接 lib 我安装了库:结果:FindLibSnap7.cmake:CMakeLists.txt:catkin_make 输出:lld 输出全部内容,希望文章能够帮你解决ROS CPP Snap7 Linux - CMake 不链接 lib 我安装了库:结果:FindLibSnap7.cmake:CMakeLists.txt:catkin_make 输出:lld 输出所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:-输出