成功使用CMakeLists制作后如何修复"open: No such file or directory"错误(该文件实际上存在)

How to fix "open: No such file or directory" error(The file actually exists) after successfully using CMakeLists to make

本文关键字:directory 错误 or file 存在 实际上 文件 such CMakeLists 成功 open      更新时间:2023-10-16

>我正在尝试从"https://github.com/barulicm/PiPCA9685"安装电机驱动程序C++驱动程序库

我按照自述指南使用 CMakeList 在"build"文件夹中构建库。由于 python 部分发生了一些错误,我只需要C++部分,所以我删除了 CMakeList 中的 python 部分。

我在Raspberry Pi上安装了Ubuntu-mate,"uname -a"给出了"Linux raspi-desktop 4.15.0-1037-raspi2 #39-Ubuntu SMP PREEMPT 星期三五月15 20:17:07 UTC 2019 armv7l armv7l armv7l GNU/Linux">

由"make"命令生成的文件类型是"ELF 32位LSB共享对象,ARM,EABI5版本1(SYSV),动态链接,解释器/lib,用于GNU/Linux 3.2.0,BuildID[sha1]=63902bc89b28eaccea17c072a287c89020927f4d,未剥离" 当我尝试"./文件名"时,终端显示"打开:没有这样的文件或目录">

以前,我按照相同的过程生成可执行文件(过程是:cmake,make,./文件名)生成的文件是可执行的,其文件类型是"ELF 32位LSB共享对象,ARM,EABI5版本1(GNU/Linux),动态链接,解释器/lib,用于GNU/Linux 3.2.0,BuildID[sha1]=5bfba81687467450b832e6eae79a02978714772b,未剥离">

我发现这两个文件之间的区别不是可执行文件,一个是"EABI5版本1(SYSV)",可执行文件一个是"EABI5版本1(GNU/Linux)">

我用谷歌搜索了差异,不知道这是否是导致"没有这样的文件或目录"的原因

我是C++新手,如果你给我一些建议,对我有很大帮助。谢谢!

修改后的CMakeLists:

cmake_minimum_required(VERSION 3.1)
project(PiPCA9685 VERSION 1.0.0)
set(CMAKE_CXX_STANDARD 14)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/modules")

#
#
find_package(WiringPi REQUIRED)
include_directories(${WiringPi_INCLUDE_DIRS})


include_directories(include)

#
#
add_library(PiPCA9685 src/PCA9685.cpp)
target_link_libraries(PiPCA9685 ${WiringPi_LIBRARIES})
set_property(TARGET PiPCA9685 PROPERTY POSITION_INDEPENDENT_CODE ON)
set_target_properties(PiPCA9685 PROPERTIES VERSION ${PiPCA9685_VERSION} SOVERSION ${PiPCA9685_VERSION})

#
#
set(INSTALL_INCLUDE_DIR "include")
set(INSTALL_LIBS_DIR "lib")
set(INSTALL_STATIC_DIR "lib/static")
set(INSTALL_RUNTIME_DIR "bin")
set(INSTALL_CONFIG_DIR "${INSTALL_LIBS_DIR}/PiPCA9685/cmake")
include(CMakePackageConfigHelpers)
configure_package_config_file(
cmake/PiPCA9685Config.cmake.in
PiPCA9685Config.cmake
INSTALL_DESTINATION lib/cmake/PiPCA9685
PATH_VARS INSTALL_INCLUDE_DIR
)
install(
TARGETS PiPCA9685
EXPORT PiPCA9685Targets
RUNTIME DESTINATION ${INSTALL_RUNTIME_DIR}
LIBRARY DESTINATION ${INSTALL_LIBS_DIR}
ARCHIVE DESTINATION ${INSTALL_STATIC_DIR}
)
install(
DIRECTORY include/PiPCA9685
DESTINATION ${INSTALL_INCLUDE_DIR}
)
install(
EXPORT PiPCA9685Targets
FILE PiPCA9685Targets.cmake
DESTINATION ${INSTALL_CONFIG_DIR}
)
install(
FILES "${CMAKE_CURRENT_BINARY_DIR}/PiPCA9685Config.cmake"
DESTINATION ${INSTALL_CONFIG_DIR}
)

感谢您对PiPCA9685的关注!欢迎来到C++!

错误消息"打开:没有这样的文件或目录"实际上是来自库的消息,因此您的程序正在运行。(我没有在这个项目中放置更清晰的错误消息)。

真正的问题是库正在尝试打开 linux 设备路径"/dev/i2c-1",以便它可以通过 I2C 与PCA9685驱动程序通信。

我没有亲自在Pi上的Ubuntu-Mate中使用过I2C,但是经过一些快速搜索,看起来默认情况下没有启用I2c的Ubuntu-Mate安装。希望类似这篇文章中的答案可以帮助您启用 I2C,以便存在"/dev/i2c-1"路径。 https://raspberrypi.stackexchange.com/questions/61905/enable-i2c-on-ubuntu-mate-raspberry-pi-3