静态库中的lib:该LIB包含函数代码本身(即包括函数的索引,也包括实现),在编译时直接将代码加入程序当中。
动态库中的lib:该LIB包含了函数所在的DLL文件和文件中函数位置的信息(索引),函数实现代码由运行时加载在进程空间中的DLL提供。
下面在VS2017下测试动态库、静态库的生成和使用
(1)生成和使用动态库
①生成动态库
VS2017新建项目后,点击项目-属性-常规,将配置类型改为动态库,如图所示:
新建dlltest.h和dlltest.cpp文件,导出一个类,实现加减法,如图所示:
然后点击生成-重新生成解决方案,最后在工程Debug目录下会生成一个dll文件和一个lib文件,如图所示:
②使用动态库
有两种方法调用动态库,一种隐式链接,一种显示链接,这里只讲隐式链接。
VS2017新建工程,将生成动态库的.h文件、.dll文件和.lib文件放到工程目录下(lib文件可以不加到工程目录下,可以设置项目属性-VC++目录--库目录为lib所在的路径,再将lib添加到项目属性--链接器--输入--附加依赖项(或者直接在源代码中加入#pragma comment(lib, “**.lib”))),如图所示:
包含.h文件,编写使用代码,并重新生成项目,如图所示:
表明动态库使用成功。
需要注意的是,工程目录下,lib文件和dll文件二者都不能少,如果少了lib文件,那么编译时会报错,如果少了dll文件,那么运行时会报错,如图所示:
(2)生成和使用静态库
①生成静态库
生成静态库的方法和动态库类似,VS2017新建项目后,点击项目-属性-常规,将配置类型改为静态库,再新建libtest.h和libtest.cpp文件,不同的是,头文件类名前不需要加
__declspec(dllexport),如图所示:

然后点击生成-重新生成解决方案,最后在工程Debug目录下会生成一个lib文件,如图所示:

②使用静态库
与使用动态库类似,在项目的资源文件里加入.lib文件(或将lib路径添加到库文件),包含.h文件,编写使用代码,并重新生成项目,同样可以运行成功。
test.cpp:
然后将test.cpp封装成动态库,步骤如下:
1)生成.o文件。g++ -c -fpic test.cpp
2)封装成自己的动态库(注意动态链接库的不能随意起名,需遵循如下的命名规则:libxxx.so)。
g++ -shared test.o -o libmymath.so
- 将链接库文件移动到标准库目录下(例如 /usr/lib、/usr/lib64、/lib、/lib64);
- 在终端输入,其中 xxx 为动态链接库文件的绝对存储路径(此方式仅在当前终端有效,关闭终端后无效);
- 修改~/.bashrc 或~/.bash_profile 文件,即在文件最后一行添加(xxx 为动态库文件的绝对存储路径)。保存之后,执行指令(此方式仅对当前登陆用户有效)
与生成动态库类似,将test.cpp封装成动态库,步骤如下:
1)生成.o文件。g++ -c test.cpp
2)打包封装成自己的静态库(注意静态链接库的不能随意起名,需遵循如下的命名规则:libxxx.a)。
ar rcs libmymath.a test.o
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/38983.html