运行Linux demo通用流程及其常见编译问题
通常流程:
1. 下载gcc官网例程(不同的系统对应不同下载链接)
2. 对x86_64系统使用对应x86_64格式的库文件libginkgo_driver.so、libusb.so
对ARM系统使用对应ARM格式的 库文件libginkgo_driver.so、libusb.so
3. 然后make,使用超级权限(因为要是用usb驱动)运行就好。
4. python demo也是可以调用libGinkgo_driver.so、libusb.so。
通常遇到的问题:
1. 对应流程1,下载错demo, linux OS,下载为MacOS的,等等。
2. 对应流程2,库文件libGinkgo_driver.so格式用错:
2.1 x86(32bit),使用为x64(64bit)的版本。
2.2 x86_64的系统使用了arm版本的, 反之也不能编译通过的,或者python的代码就是不能运行。
发布的时候,32bits和64bits的分开文件夹的。
怎么查看到底是x86_64,还是Arm版本?使用linux的命令就好(不知道命令的话,百度...)。
2.3 库文件libusb.so格式用错:
和2.1, 2.2的类似。(要注意:Arm的so是libusb-0.1.so, x86_64的系统是libusb-1.0.so)
一般发布的demo里就带有两种架构的so,编译错误里一般会有警告提示,仔细查看就能看到。
对于libusb.so的引用,
-> 可以在makefile里加上,编译。
-> 也可以在usr/lib下建一个软链接,指向实际的位置。
3. 对应流程3,
或者运行runme.sh的脚本,export libusb.so的执行路径。
4. python demo的运行,在usr/lib下,建立软链接是通用的做法,
这里特别注意:libGinkgo_Driver.so使用时,会调用libusb.so的接口,
4.1 有的系统不会显示报错,就是不知道问题所在,
这时候可以使用c语言的demo,确保硬件是好的,确保libGinkgo_Driver.so,libusb.so是正确的。
然后再查看python demo的问题。
附上常见的issue:
[mz@localhost LinuxGCC_USB_GPIO_Test]$ sudo make
g++ -o USB_GPIO_Test USB_GPIO_Test.o -L./lib/linux_64bit -lGinkgo_Driver -lpthread
/bin/ld: warning: libusb-0.1.so.4, needed by ./lib/linux_64bit/libGinkgo_Driver.so, not found (try using -rpath or -rpath-link)
./lib/linux_64bit/libGinkgo_Driver.so: undefined reference to `usb_release_interface'
./lib/linux_64bit/libGinkgo_Driver.so: undefined reference to `usb_reset'
./lib/linux_64bit/libGinkgo_Driver.so: undefined reference to `usb_find_busses'
./lib/linux_64bit/libGinkgo_Driver.so: undefined reference to `usb_claim_interface'
./lib/linux_64bit/libGinkgo_Driver.so: undefined reference to `usb_find_devices'
./lib/linux_64bit/libGinkgo_Driver.so: undefined reference to `usb_get_busses'
./lib/linux_64bit/libGinkgo_Driver.so: undefined reference to `usb_bulk_write'
./lib/linux_64bit/libGinkgo_Driver.so: undefined reference to `usb_init'
./lib/linux_64bit/libGinkgo_Driver.so: undefined reference to `usb_interrupt_read'
./lib/linux_64bit/libGinkgo_Driver.so: undefined reference to `usb_interrupt_write'
./lib/linux_64bit/libGinkgo_Driver.so: undefined reference to `usb_bulk_read'
./lib/linux_64bit/libGinkgo_Driver.so: undefined reference to `usb_open'
./lib/linux_64bit/libGinkgo_Driver.so: undefined reference to `usb_close'
collect2: error: ld returned 1 exit status
make: *** [USB_GPIO_Test] Error 1
[mz@localhost LinuxGCC_USB_GPIO_Test]$ sudo make
g++ -o USB_GPIO_Test USB_GPIO_Test.o -L./lib/linux_64bit -lGinkgo_Driver -lusb -lpthread
[mz@localhost LinuxGCC_USB_GPIO_Test]$ sudo ./runme.sh
/home/mz/Desktop/LinuxGCC_USB_GPIO_Test
/home/mz/Desktop/LinuxGCC_USB_GPIO_Test/lib/linux_64bit:
./USB_GPIO_Test: symbol lookup error: /home/mz/Desktop/LinuxGCC_USB_GPIO_Test/lib/linux_64bit/libGinkgo_Driver.so: undefined symbol: usb_init
[mz@localhost LinuxGCC_USB_GPIO_Test]$ sudo ./runme.sh
/home/mz/Desktop/LinuxGCC_USB_GPIO_Test
/home/mz/Desktop/LinuxGCC_USB_GPIO_Test/lib/linux_64bit:
No device connect!
[mz@localhost LinuxGCC_USB_GPIO_Test]$
|