谁有C++没有usb驱动动库和Linux的库,我需要一份

能否将c++.o和c.o进行链接合并怎么做,又如何使用呢

在中简单介绍了静态库的制作方法但实际上动态库的使用更为广泛,至于原因在一文中已有说明。本文介绍动态库的制作方法以及两种使用方式

代码比较简单,只囿一个test函数用于打印一段字符串。

只需要执行以下命令即可:

其中的-fPIC表示生成位置无关代码以便在只有一个副本的情况下供多个应用程序共享。

通过readelf命令查看elf文件类型:

 
 
常见有两种使用方式一种是加载时链接,另一种是使用时链接
 
加载时链接在代码中不需要做额外嘚动作,像使用静态库一样使用即可例如main.c如下:

其中-L指定从当前目录下寻找动态库libtest.so,否则会找不到
然后我们还可以通过ldd命令查看其依賴的动态库:
 
其中就有我们自己制作的libtest.so。

很不幸程序并没有如预期的那样运行起来,而是报错了这是为什么呢?
其实我们在使用ldd命令查看的时候就注意到:
它并不能找到这个动态库,因为它会默认从系统库的路径去查找这个库但是我们并没有把这个库放到系统路径丅,因此会找不到了
我们有两种方法解决这个问题:
  • 指定当前进程动态库搜索路径
 



 
 
为了使用这种方式,需要使用几个函数dlopendlsym,dlclosedlerror,其原型分别如下:

Linux中so文件为共享库与windows下dll类似,不過实现要简单

so可以供多个进程使用,不同进程调用同一个so文件所使用so文件不用。

so文件源程序不需要main函数有也不会被执行。

下面通过┅个简单例子来学习.so文件的制作跟使用(前提已经配置好环境)、

主要了解学习用C语言编译一个动态链接库,如何使用这个库

1、通过简單max函数生成一个libmax.so链接库

2、使用链接库,需要包含头文件(很正常我们平时使用C库函数也需要包含相关头文件)

运行结果:生成可执行程序main(成功了)


3、使用C++编译使用C语言提供的链接库, 编译链接出错(下面只是简单将main.c 改为main.cpp)


libmax这个库仅适合C使用C++并不适合,如果想编译一個可以供C++使用那么头文件(max.h)就需要改变,

max.h(修改如下)


4、但是这样有一个问题难道每次编译都要改来改去,有没有同时适合C/C链接库嘚方法呢

答案是有的,只需要改动头文件即可使用条件编译

然后发现写到最后,才知道main.c调用max函数时,居然使用同一个参数好傻, 給自己狠狠一巴掌

详细可以在大神博客学习: 

我要回帖

更多关于 usb驱动 的文章

 

随机推荐