日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Libusb交叉编译和移植

發布時間:2025/5/22 编程问答 68 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Libusb交叉编译和移植 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

  Libusb交叉編譯和移植
  
  某項目內核需要支持USB的相關操作,所以考慮移植Libusb庫
  
  1、到官網下載最新的libusb源碼(1.0.22)
  
  2、解壓源碼
  
  3、進入解壓后的文件夾進行交叉編譯
  
  5、將動態庫復制到當前系統的/lib下
  
  6、libusb-compat的安裝
  
  7、將libusb移植到單板
  
  8、制作測試程序的Makefile文件
  
  9、編譯過程遇到的問題
  
  某項目內核需要支持USB的相關操作,所以考慮移植Libusb庫
  
  1、到官網下載最新的libusb源碼(1.0.22)
  
  https://sourceforge.net/projects/libusb/files/
  
  -rwxr–r-- 1 roth-qt roth-qt 598833 7月 10 08:47 libusb-1.0.22.tar.bz2
  
  2、解壓源碼
  
  tar -xvf libusb-1.0.22.tar.bz2
  
  3、進入解壓后的文件夾進行交叉編譯
  
  ./configure --build=i686-linux --host=arm-linux --prefix=/home/roth-qt/libusb_source/libusb CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ --disable-udev
  
  1
  
  –host=arm-linux表示該軟件編譯完成后在arm平臺上運行
  
  –prefix=/home/roth-qt/libusb_source/libusb 表示該軟件編譯完成后安裝目錄。
  
  此處我嘗試在/目錄下的子目錄安裝,發現會有找不到arm-linux-ranlib錯誤,而且指定環境變量也無法解決,只有在用戶目錄下進行安裝。
  
  另外配置時會出現configure: error: udev support requested but libudev header not installed,只需要disable掉udev就可以了。
  
  CC=,CXX等于指定了交叉編譯器
  
  4、編譯安裝
  
  make&&make install
  
  這一步執行完畢后交叉編譯完成
  
  但是編譯完成后發現libusb-1.0連接到libusb-1.0.so.0.1.0,而這個庫是沒有usb_init, usb_find_busses…所以要安裝libusb-compat-0.1.5
  
  5、將動態庫復制到當前系統的/lib下
  
  為了能夠在當前環境下編譯usblib的源碼,將lib下的庫拷貝到/lib/下去
  
  sudo cp *.so /lib/. –d
  
  6、libusb-compat的安裝
  
  編譯出的include里面沒有以前寫的應用程序需要的usb.h文件!!! 需要在編譯1.0版本后,額外編譯0.1 compat兼容支持包,它會產生usb.h!!
  
  配置libusb-compat-0.1.5的時候遇到了下面的錯誤
  
  checking for LIBUSB_1_0... no
  
  configure: error: Package requirements (libusb-1.0 >= 0.9.1) were not met:
  
  No package 'libusb-1.0' found
  
  1
  
  2
  
  3
  
  compat找不到依賴的libusb-1.0.x的configure出錯。在libusb_source/libusb/lib/pkgconfig目錄下找到了libusb-1.0.pc。所以在環境變量中添加
  
  export PKG_CONFIG_PATH=/home/roth-qt/libusb_source/libusb/lib/pkgconfig
  
  執行配置
  
  ./configure --build=i686-linux --host=arm-linux --prefix=/home/roth-qt/libusb_source/libusb CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ PKG_CONFIG_PATH=/home/roth-qt/libusb_source/libusb/lib/pkgconfig
  
  1
  
  之后make & make install完成安裝,之后在安裝目錄下的include找到了usb.h
  
  將usb.h移到libusb-1.0目錄下去
  
  查看現在的lib目錄
  
  多了libusb.so連接到libusb-0.1.so.4.4.4,而這個庫是支持了usb_init, usb_find_busses…
  
  7、將libusb移植到單板
  
  tar jcvf libusb.tar.bz libusb
  
  將打包好的文件放到fs的usr/local下
  
  在etc/profile或者(qt_env腳本)中加入
  
  export LIBUSBDIR=/usr/local/libusb
  
  export LD_LIBRARY_PATH=/usr/local/libusb/lib:$LD_LIBRARY_PATH
  
  8、制作測試程序的Makefile文件
  
  Makefile指定編譯行
  
  LIBUSB=/home/roth-qt/libusb_source/libusb
  
  arm-none-linux-gnueabi-gcc -o test -I${LIBUSB}/include/libusb-1.0 -L${LIBUSB}/lib/ -lusb -lusb-1.0 test.c
  
  1
  
  2
  
  9、編譯過程遇到的問題
  
  9.1、編譯連接的時候提示如下信息
  
  UsbAudio.cpp:(.text+0x10): undefined reference to `usb_init'
  
  UsbAudio.cpp:(.text+0x14): www.mingcheng178.com undefined reference to `usb_find_busses'
  
  UsbAudio.cpp:(.text+0x18): undefined reference to `usb_find_devices'
  
  /tmp/ccskaM8m.o: In function `UsbAudio::usbFind()':
  
  UsbAudio.cpp:(.text+0x7c): undefined reference to `usb_get_busses'
  
  /tmp/ccskaM8m.o: In function `main':
  
  UsbAudio.cpp:(.text+0x39c): www.gcyL157.com?undefined reference to `UsbAudio::UsbAudio()'
  
  UsbAudio.cpp:(.text+0x458): undefined reference to `UsbAudio::~UsbAudio()'
  
  UsbAudio.cpp:(.text+0x474):www.michenggw.com? undefined reference to `UsbAudio::~UsbAudio()'
  
  UsbAudio.cpp:(.text+0x478): undefined reference to `__cxa_end_cleanup'
  
  /tmp/ccskaM8m.o:(.ARM.extab+0x24): undefined reference to `__gxx_personality_v0'
  
  /home/roth-qt/libusb_source/libusb/lib//libusb-1.0.so: undefined reference to `clock_gettime'
  
  安裝了libusb-compat-0.1.5后在Makefile中加上-lusb編譯選項,會自動找到libusb.so的庫,此時它連接到libusb-0.1.so.4.4.4,支持上面的函數
  
  9.2、此時編譯還有三個錯誤
  
  UsbAudio.cpp:(.text+0x4b8): www.dasheng178.com/? undefined reference to `__cxa_end_cleanup'
  
  /tmp/ccMjiKNX.o:(.ARM.extab+0x24): undefined reference to `__gxx_personality_v0'
  
  /home/roth-qt/libusb_source/libusb/lib/ www.mcyllpt.com libusb-1.0.so: undefined reference to `clock_gettime'
  
  9.2.1 先解決第三個缺少clock_gettime的問題,只需要在Makefile編譯的時候加上連接選項-lrt就可以了
  
  9.2.2 前兩個問題是用g++編譯C++程序,在進行連接的時候需要標準c++庫,所以添加-lstdc++
  
  9.3、U盤的判斷
  
  找到USB設備后,判斷bInterfaceClass是否為8,代表U盤

轉載于:https://my.oschina.net/u/3386278/blog/2986268

總結

以上是生活随笔為你收集整理的Libusb交叉编译和移植的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。