1.动态库的创建
在Linux平台下利用gcc命令:
gcc -fPIC -shared -o lib<动态库名>.so <相关.c 和 .o文件>
在Windows下使用VS:(我用的是2013)
选择Visual C++下的Win32控制台应用程序,然后按下确定,你会进入如下画面:
下一步------
按下完成后,你将你要生成动态库的内容放入
之后编译后就会在项目文件夹下的DEBUG文件夹里生成动态库.dll文件,如果你是在release文件下编译,则是生成release版本的.dll文件.
别急,还没完,我们动态库还要生成一个.lib文件, .lib文件里放的是呈现给用户的api函数.
怎么做?加上动态库导出符号----(linux下不需要这么做)
将__declspec(dllexport)加入到你要用来当API函数的声明和定义前,VS2013前的VS不需要放在声明前面.
之后当有人需要用你的动态库时,将.lib和 .dll文件还有.h文件给用户即可.
2.动态库的调用
Linux下使用动态库
编译时使用:
gcc <C文件> -L . -l<库名>
要注意时库名不是动态库名,我这里-L.表示动态库在当前目录下,-L用于指定目录.
执行时使用:
如果动态库不常用,在你的shell界面输入:
export LD_LIBRARY_PATH=<动态库绝对路径>
这表示在本次登录环境下加入这个动态库,你一登出它就消失了.
还有个随内核保存它的方式:
1、vim /etc/ld.conf.d/XX.conf 2、在文件里写上你的动态库的路径并保存。 3、shell下输入ldconfig 4、ldd a.out即可
Windows环境下:
当一段程序需要引入动态库时,需要加入动态库.lib .dll文件放到你当前项目的文件夹下, .h文件放在与你代码文件同一目录下.然后在编译器中引入.h文件
下一步你需要让你的编译器知道你引入了.lib 文件
然后-----
记住,引入.lib文件,这样就可以执行了.
但是,如果你要将你的.exe文件单独使用,那么必须再将.lib 和 .dll文件放到.exe文件下,方可使用.
3.动态库的调试
动态库的调试有下列几个条件:(这里专门讲vs2013下的)
1.使用的动态库要是最新的.
2.获得动态库源码
3.动态库时Debug版本的
4.要做两个项目,测试项目和动态库项目
然后一个VS打开动态库源码,一个VS打开测试项目,你就可以开始调试了.(简单吧)
4.使用动态库需要注意的点
简单提两点...鼠标没电了,要出门买电池.
1.确保自己在使用是最新的动态库
因为操作系统环境很复杂,所以如果你用的是旧的动态库,就算你更新了新的动态库,你也发现你有同样的问题.
2.动态库的内存释放
内存释放这种东西,就该从哪开辟,从哪释放,所以动态库文件如果涉及内存开辟,要注意代码的对称性,一定要提供开辟内存的接口后再开辟释放的API函数,毕竟平台这么多.
要做两个项目,测试项目和动态库项目