动态库和静态库的使用(什么是动态库静态库)

动态库和静态库的使用(什么是动态库静态库)nbsp nbsp 静态库中的 lib 该 LIB 包含函数代码本身 即包括函数的索引 也包括实现 在编译时直接将代码加入程序当中 nbsp nbsp nbsp 动态库中的 lib 该 LIB 包含了函数所在的 DLL 文件和文件中函数位置的信息 索引 函数实现代码由运行时加载在进程空间中的 DLL 提供 nbsp nbsp 下面在 VS2017 下测试动态库 静态库的生成和使用 1 生成和使用动态库 生成动态库 nbsp nbsp VS2017 新建项目后



静态库中的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文件,编写使用代码,并重新生成项目,同样可以运行成功。

3.Linux下的动态库和静态库
在Linux下,使用GCC编译器生成动态库和静态库
(1)生成和使用动态库
①生成动态库
在Linux下新建test.h、test.cpp文件,如下所示:
test.h:

test.cpp:

然后将test.cpp封装成动态库,步骤如下:

1)生成.o文件。g++ -c -fpic test.cpp

2)封装成自己的动态库(注意动态链接库的不能随意起名,需遵循如下的命名规则:libxxx.so)。

  g++ -shared test.o -o libmymath.so

②使用动态库
动态链接库的使用场景就是和项目中其它源文件或目标文件一起参与链接(通过执行ldd指令,可以查看当前可执行文件在执行时需要用到的所有动态链接库)。
新建一个main.cpp,来使用该动态库,如下所示:
使用命令为:g++ main.cpp libmymath.so(也可以先生成main.o文件再使用)
这时会生成可执行文件a.out,执行即可运行处结果。
注意:
与Windows类似,运行由动态链接库生成的可执行文件时,必须确保程序在运行时可以找到这个动态链接库。如果找不到,常用的解决方案有如下几种:
  • 将链接库文件移动到标准库目录下(例如 /usr/lib、/usr/lib64、/lib、/lib64);
  • 在终端输入,其中 xxx 为动态链接库文件的绝对存储路径(此方式仅在当前终端有效,关闭终端后无效);
  • 修改~/.bashrc 或~/.bash_profile 文件,即在文件最后一行添加(xxx 为动态库文件的绝对存储路径)。保存之后,执行指令(此方式仅对当前登陆用户有效)
(2)生成和使用静态库
①生成静态库

与生成动态库类似,将test.cpp封装成动态库,步骤如下:

1)生成.o文件。g++ -c test.cpp

2)打包封装成自己的静态库(注意静态链接库的不能随意起名,需遵循如下的命名规则:libxxx.a)。

ar rcs libmymath.a test.o

②使用静态库
对于main.cpp文件,使用命令为:g++ main.cpp -static libmymath.a(也可以先生成main.o文件再使用)
这时会生成可执行文件a.out,执行即可运行处结果。
参考文章:
https://www.cnblogs.com/TenosDoIt/p/3203137.html
http://c.biancheng.net/view/8010.html
编程小号
上一篇 2025-02-08 15:33
下一篇 2025-03-29 21:11

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/38983.html