求教这个makefile有什么问题

孟如庭 2016-03-15 06:31:19
做了一个so库,里面使用了 libusb-1.0这个库,动态连接即-lusb-1.0是可以的。但是考虑到其他系统不一定安装过libus-1.0这个库,所以想静态链接到我的so库。但是如下的makefile编译出来的so无法使用,报错,dlopen返回2


 
GCC= g++
CFLAGS = -g -fPIC -shared
OBJS=123.c sha-1.c sms4.c Comm.cpp

all:$(OBJS)
$(GCC) $(CFLAGS) $(OBJS) libusb-1.0.a -Wl,-soname,libtest.so.1 -o libtest.so.1.0.0

clean:
rm -rf libtest.so.*
rm -rf *.o
...全文
167 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
孟如庭 2016-03-16
  • 打赏
  • 举报
回复
找到原因了。不是 libusb-1.0.a的问题,而是忘了加 -lpthread -lrt。 但是出现了另外奇怪的现象,加了-static -lpthread -lrt后,可以正常使用库。但测试程序结束后,会报段错误 Segmentation fault。不加-static ,只用 -lpthread -lrt 就没问题。原因未知。
孟如庭 2016-03-15
  • 打赏
  • 举报
回复
引用 6 楼 ynsenyu 的回复:
这个不知道了,一般应该不会有静态链接库的
???安装后,在系统中能找到.a文件啊
ynsenyu 2016-03-15
  • 打赏
  • 举报
回复
这个不知道了,一般应该不会有静态链接库的
孟如庭 2016-03-15
  • 打赏
  • 举报
回复
我的系统是centos,也有ubuntu 动态连接,是可以的
$(GCC) $(CFLAGS) -o liblg_gm.so.1.0.0 $(OBJS) -lusb-1.0
但是编译出来的so库无法在其他机器上使用。返回错误也是2 想改成静态连接,结果在我自己的电脑上就无法使用so库了,不知道原因
引用 3 楼 ynsenyu 的回复:
晕,看错了,以为他是编译静态链接库。。。不知道你的是啥linux,可以自己下载源码编译静态链接的libusb
孟如庭 2016-03-15
  • 打赏
  • 举报
回复
引用 3 楼 ynsenyu 的回复:
晕,看错了,以为他是编译静态链接库。。。不知道你的是啥linux,可以自己下载源码编译静态链接的libusb
我没自己编译,但是安装了libusb,也找到了libusb-1.0.a进行链接,但就是通不过。奇怪啊
ynsenyu 2016-03-15
  • 打赏
  • 举报
回复
晕,看错了,以为他是编译静态链接库。。。不知道你的是啥linux,可以自己下载源码编译静态链接的libusb
fefe82 2016-03-15
  • 打赏
  • 举报
回复
so 是没法静态链接的吧。
ynsenyu 2016-03-15
  • 打赏
  • 举报
回复
是不是还要ranlib之类的?

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧