Linux 下libusb编译与生成动态链接库

10 篇文章 0 订阅
8 篇文章 1 订阅

一、前言

        上一篇文章提到了怎样使用Ubuntu 安装libusb,忘了如何将如何编译。尴尬


二、libusb使用GCC 编译

正常来讲,使用  gccc xxx.c -o xxx -I/usr/include -lusb-1.0   就可以了,如下图:


但是,当使用Ubuntu 12.04 使用这条命令编译,则会报错,如下图:


提示,未找到这个`clock_gettime' 这个函数。惊恐

经测试,分别使用 Ubuntu 12.04   Ubuntu 14.04   Ubuntu 16.04   Ubuntu 17.10

只有在 Ubuntu 12.04  才会报错,也许这个太老了。

解决办法就是在命令后面,加上  -lrt  连接上实时库(real time)

如下图,在Ubuntu 12.04 上编译通过


当连接多个文件是,建议最好使用Makefile,因为太久没有用了,当同时编译多个.c 文件,竟然忘了需要在命令上加上其他.c 文件,结果纠结几个小时才发现。害羞在Windows 上用集成开发环境用多了。

如下图,同时连接多个文件,每次敲这个命令非常麻烦。


直接使用make, 方便又省事。


我的Makefile

LD		:= $(CROSS_COMPILE)ld
CC		:= $(CROSS_COMPILE)gcc
CPP		:= $(CROSS_COMPILE)g++
AR		:= $(CROSS_COMPILE)ar
STRIP	:= $(CROSS_COMPILE)strip

CFLAGS += -fPIC

SOURCES = $(wildcard *.c)
DEP = $(wildcard *.h)
OBJS = $(patsubst %.c, %.o,$(SOURCES))

ICMLIB_O = BulkTransfer.o ControlTranfser.o ErrorCode.o M235API.o UsbHid.o
ICMLIB_C = BulkTransfer.c ControlTranfser.c ErrorCode.c M235API.c UsbHid.c

TARGET_SO = libm235.so
TARGET_TEST = m235module 

$(TARGET_TEST): 
	$(CC) $(CFLAGS) *.c -o $(TARGET_TEST) -I/usr/include/ -lusb-1.0 -lrt

$(TARGET_SO): $(ICMLIB_O)
	$(CC) $(CFLAGS) -shared -o $@ $(ICMLIB_O) $(LIB) 
	if [ ! -z "$(STRIP)" ]; then $(STRIP) --strip-all $@; fi;

$(ICMLIB_O): %.o: %.c $(DEP)
	$(CC) $(CFLAGS) -c $< -o $@ -I/usr/include/ -lusb-1.0 -lrt

clean:
	rm -f $(TARGET_SO) *~ *.swp $(OBJS) a.out *.gc* $(TARGET_TEST)

三、动态库的编译

需要将libub的函数封装到用户自己的动态库中,有几个注意的问题,动态库的编译命令和正常的一样。

但是,当别人使用你的调用你的动态库时,千万记得需要将 /usb/local/lib 的libusb-1.0.so  提供给别人,

不然当用户调你的动态库编译会报如下错误,


所以,需要提供那个库,如下图:


记录,结束。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值