vs2019生成动态链接库

封装的原则:隐藏ffmpeg和sdl的实现

当只引用其中库中变量和函数的指针,而不使用其内部的实现,就无需引用头文件,只要前面加一下声明即可。

1. 动态库与静态库

项目会在在win中演示,但终要跨平台
.lib和.dll的区别

为什么项目使用动态库而非静态库?

在这里插入图片描述


linux和windows动态库的路径:Linux需要定义查询.so的路径,windows可以自定义路径,也可以直接放在.exe下面

2. 动态链接库的生成

win要编译成动态库的函数需要加上__declspec

__declspec是Microsoft VC中专用的关键字,它配合着一些属性可以对标准C/C++进行扩充。__declspec关键字应该出现在声明的前面。

__declspec(dllexport)用于Windows中的动态库中,声明导出函数、类、对象等供外面调用,省略给出.def文件。 即将函数、类等声明为导出函数,供其它程序调用,作为动态库的对外接口函数、类等。

.def文件(模块定义文件)是包含一个或多个描述各种DLL属性的Module语句的文本文件。.def文件或__declspec(dllexport)都是将公共符号导入到应用程序或从DLL导出函数。如果不提供__declspec(dllexport)导出DLL函数,则DLL需要提供.def文件。

** __declspec(dllimport)用于Windows中,从别的动态库中声明导入函数、类、对象等供本动态库或exe文件使用。**当你需要使用DLL中的函数时,往往不需要显示地导入函数,编译器可自动完成。不使用__declspec(dllimport)也能正确编译代码,但使用__declspec(dllimport)使编译器可以生成更好的代码。 编译器之所以能够生成更好的代码,是因为它可以确定函数是否存在于DLL中,这使得编译器可以生成跳过间接寻址级别的代码,而这些代码通常会出现在跨DLL边界的函数调用中。声明一个导入函数,是说这个函数是从别的DLL导入。一般用于使用某个DLL的exe中。

window桌面程序相当可以生成一些宏来判断是export库还是import库

// 下列 ifdef 块是创建使从 DLL 导出更简单的宏的标准方法。
// 此 DLL 中的所有文件都是用命令行上定义的 XCODEC_EXPORTS符号编译的。
// 在使用此 DLL 的任何项目上不应定义此符号。
// 这样,源文件中包含此文件的任何其他项目
// 都会将XCODEC_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的符号视为是被导出的。
#ifdef WIN32			//若是Windows
#ifdef XCODEC_EXPORTS	//若是导出
#define XCODEC_API __declspec(dllexport)	//导出
#else
#define XCODEC_API __declspec(dllimport)	//导入
#endif
#else	//若不是windows
#define XCODEC_API	//定义为空
#endif

创建工程时,默认已经定义了导出export了

在这里插入图片描述
在这里插入图片描述

3. 使用动态链接库

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Linux中,生成动态链接库的步骤如下:首先,使用gcc命令编译生成地址无关代码,可使用选项-fpic来指定编译生成地址无关代码。其次,使用选项-shared来生成动态链接库文件。例如,可以使用以下命令生成动态链接库文件libfun.so:gcc -fpic -shared fun.c -o libfun.so。 生成动态链接库之后,需要将生成动态链接库文件复制到系统默认的动态链接库搜索路径下。通常,系统默认的动态链接库搜索路径包括/lib、/usr/lib和/usr/local/lib等目录。可以将动态链接库文件放置在任何一个这些目录下。这样,系统在运行程序时就可以正确地找到动态链接库。 如果程序在运行时无法找到动态链接库,可以采取以下几种解决方法之一:将动态链接库的目录加入程序的搜索路径中。可以将动态链接库的路径添加到环境变量LD_LIBRARY_PATH中,以实现动态链接库的搜索。例如,可以使用以下命令将库的路径添加到LD_LIBRARY_PATH环境变量中:export LD_LIBRARY_PATH=/path/to/library。这样,程序在运行时就能找到所需的动态链接库。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Linux制作动态链接库](https://blog.csdn.net/Oscer2016/article/details/52048957)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值