Visual Studio MFC静态编译与动态编译

文章介绍了如何在MFC工程中设置动态编译和静态编译。动态编译生成的exe小但需依赖DLL,而静态编译生成的文件大但可独立运行。在静态编译时,如果遇到LNK2001错误,可以通过添加windowscodecs.lib作为附加依赖项来解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先创建MFC工程


1.动态编译
打开工程属性设置,在MFC的使用框选择“在共享DLL中使用MFC”,此时生成的exe文件很小,移植到其它电脑上运行时需要依赖的dll文件(即要有vs环境)。

设置:

  1. 项目 -> 配置属性->常规->MFC的使用 :在共享DLL中使用MFC。

 2.静态编译
打开工程属性设置,在MFC的使用框选择“在静态库中使用MFC”,此时生成的exe文件较大,移植到其它电脑上可以直接运行不依赖其它文件。

设置:

  1. 项目 -> 配置属性->常规->MFC的使用 :在静态库中使用MFC。
  2. 项目 -> 配置属性->C/C++->代码生成->运行库 :选择/MT。

         设置完毕后,若出现:error LNK2001: 无法解析的外部符号 _IID_IWICImagingFactory

         解决办法:.项目 -> 配置属性-> 链接器-> 输入->附加依赖项->编辑添加-〉windowscodecs.lib

### 静态编译生成DLL文件 在Visual Studio中通过静态编译生成DLL文件意味着将所有的依赖项都嵌入到最终的二进制文件中,从而使得生成的DLL不再依赖外部库。这种方式可以提高程序部署的便利性和独立性。 对于C++项目而言,在Visual Studio环境中实现这一目标主要涉及调整项目的配置选项[^1]: #### 设置项目属性 进入项目属性页面,导航至`配置属性 -> C/C++ -> 代码生成`部分,将`运行库`设为多线程(/MT)或调试版下的多线程调试(/MTd),而非默认的选择MD或MDd。此操作确保了标准库被静态链接而不是作为共享库引入[^2]。 另外,如果涉及到MFC组件,则需进一步设定其使用模式。具体来说是在相同位置找到`高级`分类中的`使用MFC`字段,并将其更改为“在静态库中使用MFC”。这样做的后果是所构建的应用程序将会携带完整的MFC资源而不需要额外安装MFC runtime支持包[^3]。 #### 创建DLL项目 启动Visual Studio之后新建一个空的Win32控制台应用程序或其他类型的Windows桌面应用模板;接着按照向导提示选择“动态链接库(DLL)”为目标类型。完成上述步骤后便得到了一个新的DLL解决方案框架。 为了使其他语言能够方便地调用这些接口,还需要定义好对外暴露的方法声明。通常做法是在源码里加上宏定义如`__declspec(dllexport)`用于指示编译器导出特定函数供外界访问。 最后值得注意的是当采用静态方式加载DLL时,除了正常的DLL本身外还需提供相应的`.lib`文件给使用者以便于他们在自己的工程内正确引用。同时也要分发配套的头文件(.h),里面包含了必要的数据结构描述和API原型说明[^4]。 ```cpp // Example of exporting a function from the DLL using __declspec(dllexport) extern "C" { __declspec(dllexport) void MyExportedFunction(int param); } ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

缓下脚步

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值