官方SDK提供的demo是C++的示例

x86_64的linux

  • 使用官方c++示例

    • 修改demo/linux下makefile名字

    • 执行make clean

    • 执行make

  • 使用c自己写

    • 删除无用文件,libusb-1.0.so 才是真正使用的,libusb-1.0.so.0,libusb-1.0.2.0用不到也能删

      下载
    • 修改include/HCUsbSDK.h

      #if defined _WIN32 || defined _WIN64
      #define USB_SDK_API  extern "C" __declspec(dllimport)
      #elif defined __linux__ || defined __APPLE__
      #define USB_SDK_API  extern "C"
      #endif
      

      改成

      #if defined _WIN32 || defined _WIN64
      #define USB_SDK_API  extern "C" __declspec(dllimport)
      #elif defined __linux__ || defined __APPLE__
        #ifdef __cplusplus
          #define USB_SDK_API  extern "C"
        #else
          #define USB_SDK_API //extern "C"  是c++的语法,c不支持
        #endif
      #endif
      
    • 编写makefile

      CC = gcc
      CFLAGS = -g -O0 -Wall
      INCLUDE = -I. -I../../include
      LDLIBS = -lHCUSBSDK -lpthread
      LIBPATH = ../../library/linux64 
      
      SRCS = $(wildcard *.c)
      OBJS = $(SRCS:.c=.o)
      TARGET = usb_demo
      
      $(TARGET): $(OBJS)
      	$(CC) $(CFLAGS) $^ -o $@ -L$(LIBPATH) $(LDLIBS) -Wl,-rpath=$(LIBPATH)
      	cp $@ $(LIBPATH)
      
      %.o: %.c
      	$(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@
      
      all: $(TARGET)
      	@echo "Build $(TARGET) Finished"
      
      clean:
      	rm -f $(OBJS) $(TARGET) $(LIBPATH)/$(TARGET)
      
    • 编写测试

      #include <stdio.h>
      #include "../../include/HCUsbSDK.h"
      int main(void)
      {
          USB_Init();
          
          printf("SDK_version=%d\n",USB_GetSDKVersion());
          printf("DeviceCount=%d\n", USB_GetDeviceCount());
          return 0;
      }
      
    • 注意点

      1. 编写的应用程序必须在.so依赖同级目录。

        library/linux64/
        ├── usb_demo              ← 程序
        ├── libHCUSBSDK.so        ← SDK
        ├── libhpr.so
        ├── libusb-1.0.so         ← 被  libHCUSBSDK.so dlopen
        └── libuvc.so             ← 被  libHCUSBSDK.so dlopen
        
  • 其他示例

    前往其他地方