如何解决 ros 中"对 libusb 的未定义引用"错误?
How to solve the 'undefined reference to libusb' error in ros?
我正在尝试将相机(非UVC)流程序传输到ros平台。
我已经运行了相机驱动程序
而Makefile是这样的:
g++ main.cpp -o test_gui -g -I/usr/local/include -L/usr/local/lib -D_LIN -D_DEBUG -L../lib/x64 -I../include -lASICamera -lpthread -lusb -DGLIBC_20 -m64 -lrt -I/opt
现在我想在 ros 节点中执行此操作,所以我编写了一个节点,其中 CMakelist 是这样的:
include_directories(
${catkin_INCLUDE_DIRS}
)
include_directories(/usr/local/include)
include_directories(/root/catkin_ws/src/asi_converter_real/include/asi_converter_real)
link_directories(/usr/local/lib)
link_libraries(pthread)
link_libraries(usb)
link_libraries(libASICamera.a)
link_libraries(libASICamera.so)
add_executable(asi_converter_real src/asi_converter_real.cpp)
target_link_libraries(asi_converter_real ${catkin_LIBRARIES})
生成为/catkin_ws/build/***/的 Makefile 行是这样的:
/usr/bin/c++ CMakeFiles/asi_converter_real.dir/src/asi_converter_real.cpp.o -o/root/catkin_ws/devel/lib/asi_converter_real/asi_converter_real -rdynamic -L/usr/local/lib -lpthread -lusb -wl,-Bstatic -lASICamera -wl,-Bdynamic -lASICamera
但是系统似乎找不到libusb的动态库,因为它报告
undefined reference to `libusb_set_configuration'
undefined reference to `libusb_claim_interface'
/usr/local/lib/libASICamera.a(ASI174MM.o): In function `WorkingFunc(void*)':
undefined reference to `libusb_bulk_transfer'
undefined reference to `libusb_bulk_transfer'
[1]有没有人知道如何解决这个问题?
[2]如何在我的电脑中找到libusb的.a和.so?(我确定我有它们,因为我可以 pkg-config --cflags/--libs 它们)
[3]如何在 ros CMakelist 中显式链接动态库? 或者只需 link_libraries(USB) 就足以满足静态和动态自由
find_package
要求CMake具有相应的Find<package>.cmake
Cmake 有一个 pkg 配置模块。
您可以使用它来编写自己的FindLibUSB,如CMake wiki中所述。
或者你可以直接在你的CMakeList中使用它.txt :
find_package(PkgConfig REQUIRED)
pkg_search_module(LIBUSB1 REQUIRED libusb-1.0)
include_directories(SYSTEM ${LIBUSB1_INCLUDE_DIRS})
您可以在模块文档中看到所有设置的变量:库的LIBUSB1_LIBRARIES
等...
在 cmake 中查找库通常使用 find_package
完成
在您的情况下,它可能看起来像这样(取自这个问题):
find_package(libusb-1.0 REQUIRED)
include_directories (${LIBUSB_1_INCLUDE_DIRS})
...
target_link_libraries(asi_converter_real ${catkin_LIBRARIES} ${LIBUSB_1_LIBRARIES})
当然,您可能需要调整版本号(也许可以简单地将其删除)。
相关文章:
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- Ctypes wstring通过引用传递
- c++r值引用应用于函数指针
- 理解c++中的引用
- C++取消引用指针.为什么会发生变化
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 强制转换为引用类型
- 引用一个已擦除类型(void*)的指针
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 具有默认值的引用获取函数
- 如何使用基类指针引用派生类成员
- 如何解决 ros 中"对 libusb 的未定义引用"错误?
- Libusb未定义的引用