求教这个makefile有什么问题

孟如庭 2016-03-15 06:39:21
做了一个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
...全文
207 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
孟如庭 2016-03-16
  • 打赏
  • 举报
回复
引用 3 楼 lee244868149 的回复:
引用
$(GCC) $(CFLAGS) $(OBJS) libusb-1.0.a
先使用-L指定链接路径 , 然后用-l 指定链接的库 $(GCC) $(CFLAGS) $(OBJS) -L . -llibusb-1.0.a 如果不行,也可以使用-static 选项,使用方法自己搜一下
当前目录下有libusb-1.0.a 如下的makefile $(GCC) $(CFLAGS) -o -o libtest.so.1.0.0 $(OBJS) -L. -llibusb-1.0.a 在make的时候报错 /usr/bin/ld: cannot find -llibusb-1.0.a 去掉 -l,无论加不加-static. $(GCC) $(CFLAGS) -o -o libtest.so.1.0.0 $(OBJS) -static -L. libusb-1.0.a make可以通过,编译出来的so无法加载,dlopen返回2
奔跑的路 2016-03-16
  • 打赏
  • 举报
回复
引用
$(GCC) $(CFLAGS) $(OBJS) libusb-1.0.a
先使用-L指定链接路径 , 然后用-l 指定链接的库 $(GCC) $(CFLAGS) $(OBJS) -L . -llibusb-1.0.a 如果不行,也可以使用-static 选项,使用方法自己搜一下
常书 2016-03-16
  • 打赏
  • 举报
回复
把-soname,libtest.so.1去掉可以用吗
孟如庭 2016-03-16
  • 打赏
  • 举报
回复
找到原因了。 不是 libusb-1.0.a的问题,而是忘了加 -lpthread -lrt。 但是出现了另外奇怪的现象,加了-static -lpthread -lrt后,可以正常使用库。但测试程序结束后,会报段错误 Segmentation fault。不加-static ,只用 -lpthread -lrt 就没问题。原因未知。
孟如庭 2016-03-15
  • 打赏
  • 举报
回复
着急,谢谢。请高手指教

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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