2014-11-25 116 views
0

我正在嘗試將攝像頭(非uvc)流程序傳輸到ros平臺。如何解決在ros中'未定義的引用libusb'錯誤?

我已經有了運行攝像頭的驅動

和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節點,所以我寫的其中CMakelists是這樣一個節點:


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}) 

而且Makefile行生成到/ catkin_ws /編譯/ *** /是這樣的:


 
/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/- 庫他們)

[3]我如何明確鏈接ros CMakelists動態庫?或者只是link_libraries(usb)足夠用於靜態和動態libriries?

回答

1

find_package要求CMake的具有相應Find<package>.cmake

CMake的具有pkg-config module

你可以用它來編寫你自己的FindLibUSB,as explained on the CMake wiki

或者你可以用它直接在您的CMakeLists.txt:

find_package(PkgConfig REQUIRED) 
pkg_search_module(LIBUSB1 REQUIRED libusb-1.0) 
include_directories(SYSTEM ${LIBUSB1_INCLUDE_DIRS}) 

可以在the module documentation所有已設置的變量看:LIBUSB1_LIBRARIES的圖書館,等等

+0

它可以正常工作!!!!!!!! thx leiaz,我愛pkg_search_module !!!!!!!!! – 2014-11-25 11:46:12

1

在cmake中查找庫通常使用find_package完成。

在你的情況可能是這樣的(從this question拍攝):

find_package(libusb-1.0 REQUIRED) 
include_directories (${LIBUSB_1_INCLUDE_DIRS}) 
... 
target_link_libraries(asi_converter_real ${catkin_LIBRARIES} ${LIBUSB_1_LIBRARIES}) 

您可能需要調整課程的版本號(也許它可以簡單地刪除)。

+0

喜luator,你還在嗎 ?我想我的系統找不到這個軟件包,它會報告:(find_package): 找不到軟件包libusb-1.0的配置文件。 將libusb-1.0_DIR設置爲包含libusb-1.0的CMake配置文件 的目錄。該文件將具有下列名稱之一: 的libusb-1.0Config.cmake 的libusb-1.0-config.cmake – 2014-11-25 10:53:23

+0

而且我不認爲我的系統有兩個變量$ {LIBUSB_1_INCLUDE_DIRS}和$ {} LIBUSB_1_LIBRARIES,我鍵入apt-get install libusb-1.0,它只是說我已經安裝了這個。然而,我不是在哪裏libusb。它不在/ usr/lib/usb/bin或/ usr/local/lib中。我能準確找到這個軟件包並使用絕對路線嗎? – 2014-11-25 10:55:53

+0

thx!現在它工作了! – 2014-11-25 11:47:02

相關問題