您的位置:首页 > 运维架构 > Linux

window/linux下C/C++动态库与静态库的创建与使用

2017-12-06 15:11 393 查看

window平台需要借助vs工具

制作方法:

第1步->在vs中新建一个控制台的空项目,在应用程序设置中选择DLL,附加选项勾行空项目;

第2步->将自己的要生成动态库的头文件(.h文件)与源文件(.c/.cpp文件)添加到项目中对应的文件夹中;

第3步->在每个头文件函数声明前加上__declspec(dllexport)这个宏,如果提示错误可试着将源文件中的函数前也添加上此宏;

第4步->在生成菜单下点击生成xxxdll(或在自己的项目上右键单击第一个选项生成),如此就算大功告成了。

注意:生成的动态库文件放在源文件的上级目录的debug中,名字一般为xxxdll.lib和xxxdll.dll,然后将这两个文件与你的头文件一起(.h文件)就可以发给别人使用了。

使用方法:

将头文件与xxxdll.lib文件放在与源文件同目录下,然后在项目->属性->链接器->输入->附加依赖项->编缉,通过这样将你的xxxdll.lib添加到依赖项中,这样就可以做正常编译你的程序了。如要程序正常执行还需要另外一步,需要将xxxdll.dll文件放在你程序所在的目录中,如此就算全部完成了。

Linux平台

当使用动态库时,系统会检查该动态库是否已经加载,如果已经加载,则直接映射即可,如果没有加载,那么会加载之后再映射。

如果动态库中有全局变量,那么该全局变量对于不同的进程来说,是相互独立和隔离的。

链接静态库时,静态库被一起编译进可执行程序,运行时不再依赖静态库。

动态库编译:
gcc-fpic-shareda.cb.c-olibtest.so
链接动态库
gccmain.c-ltest-L.-omybin

运行程序时

exportLD_LIBRARY_PATH=.


或者将动态库拷贝到/usr/lib

./mybin

静态库打包:
arrcslibtest.aa.ob.o

链接库时,如果有同名的动态库和静态库,默认优先动态库,如果要链接静态库,那么使用-static,比如


gcca.c-lmylib-static

通过以下方式可以指定某些库使用静态链接,而某些库使用动态链接:


-Wl,-Bstatic-ltest-Wl,-Bdynamic-ltest2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: