动态库基本知识

动态库的基本表示方法:

Windows:    xxxx.dll    .h

Linux :          xxxx.so    .h

动态库其实是一个函数的集合,是按照一定的规则来做的,用来被操作系统加载,而它本身并不是一个.exe,

而一个.exe的运行过程:首先是操作系统去创建一个进程1.exe,然后操作系统再去检测这个进程是否需要额

外的动态库,如果需要,则要按照一定的规则去加载(操作系统不知道到什么地方去加载动态库,则需要配

置路径   1.win:PATH     2.Linux : .bash_profile)

需要注意的是:动态库的名字(工程),不要用中文。

_declspec(dllexport)   Windows下在想作为接口封装设计的接口的几个函数前加上_declspec(dllexport),
编译,若出错,则在.h 文件中函数声明之前也加上,这样再编译就能成功,否则可能编译不成功

动态库编译之后会生成一个,dll和一个.lib    .dll是二进制目标集合,.lib是对.dll进行描述(描述动态库中有
多少个函数,哪些函数被导出......)而编译的过程就是与vc编译器,然后告诉编译器使用动态库,若是编译
器找不到资源符号,是因为连接器没有配置xxxx.lib.解决方法:
1.把头文件 .lib  .dll加入到新工程下
2.告诉编译器使用动态库,在新的工程下右键,属性,连接器,输入。连接器下把.lib加进去,告诉编译器
在这个路径下去加载动态库
3.若编译器找不到动态库.dll,则把.dll拷贝到跟.exe同一目录下再执行。

动态库的调试问题:
1)打开动态库项目该工程
2)打开测试案例
3)把最新的动态库copy到测试案例中
4)F11

动态库内存释放问题:
谁分配内存,就由谁去释放内存
不能直接释放动态库分配的内存,只能调用动态库里的API函数来释放内存,否则debug不断掉release也会    
断掉

动态库的使用:
把.dll   .lib  和.h放在一个文件夹之中,这时候可以去掉头文件中的_declspec(dllexport)了,然后把这个文  
件夹扔给上一级调用这些函数的人,便可以使用了

Linux 下动态库生成需要使用gcc编译,例如:

gcc -c -fPIC max.c

gcc -shared -o libmax.somax.o


Linux下使用动态库的步骤如下:

  1. 编写源文件。
  2. 将一个或几个源文件编译链接,生成共享库。
  3. 通过 -L<path> -lxxx 的gcc选项链接生成的libxxx.so。
  4. 把libxxx.so放入链接库的标准路径,或指定 LD_LIBRARY_PATH,才能运行链接了libxxx.so的程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值