我正在尝试使用这个库来使用ZED相机作为我在RaspberryPi上的项目。我成功地安装了库,共享对象文件位于/usr/local/lib/libzed_open_capture.so,包含头位于/usr/local/include/zed-open-capture/位置。为了包含这个库,我将在我的CMakeLists.txt中添加以下行
find_library(ZED_LIB zed_open_capture)
include_directories("/usr/local/include/zed-open-capture/")
add_executable(zed_pub src/zed_pub.cpp)
target_link_libraries(zed_pub ${ZED_LIB})现在,当我使用这段代码时,它会显示这个错误"‘sl_oc::video’ has not been declared“
#include "videocapture.hpp" //Library Header File
sl_oc::video::VideoCapture cap;
cap.initializeVideo();
const sl_oc::video::Frame frame = cap.getLastFrame();sudo make install安装了。图书馆的github回购是在https://github.com/stereolabs/zed-open-capture
另外,我找不到Find_PKG_name.cmake,所以我不能使用find_package()选项。
发布于 2022-01-11 14:52:11
videocapture.hpp在#ifdef VIDEO_MOD_AVAILABLE中封装了所需的定义。这似乎是没有定义的。ZED包中的根CMakeLists.txt默认为ON,因此这很可能是为包构建定义的。但是,正如其他人所指出的,包在安装的任何地方都不会保存此信息。包所要做的“正确”方法是在安装时配置/修改包含文件,以说明构建配置,可能是通过生成具有适当定义的"config.hpp“文件。或者在安装中包含一个zed-config.cmake文件,并包含所有必要的导入和定义。
你的短路解决方案应该没问题。只需添加target_compile_definitions(zed_pub PUBLIC VIDEO_MOD_AVAILABLE)即可。如果您希望将来做得更清楚,请为zed_lib创建一个导入的目标,并在该目标上同时设置include_directories和compile_definitions,这样库的所有用户都可以自动定义这个目标。
发布于 2022-01-11 07:44:43
根据ZED的CMakeLists.txt
...
# Install rules
set_target_properties(${PROJECT_NAME} PROPERTIES
PUBLIC_HEADER "${HDR_FULL}"
)
install(TARGETS ${PROJECT_NAME}
LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_PREFIX}/include/zed-open-capture)ZED似乎而不是提供任何"CMake配置“文件.
因此,您必须创建自己的FindZED.cmake模块和/或改进该项目的CMakeLists.txt .
https://stackoverflow.com/questions/70657844
复制相似问题