VS2005下DLL依赖性的去除方法?

crystal_heart 2008-03-27 12:20:03
由向导生成的一个win32普通的DLL工程,编译之后依赖到msvcr80.dll/msvcr80d.dll,如何才能去掉这个依赖?
之前用VS2003的时候好像就没有看到这个依赖dll,非常的奇怪。
...全文
1088 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zbh99999 2011-06-02
  • 打赏
  • 举报
回复
怎么还是看不到回复啊
barenx 2008-03-28
  • 打赏
  • 举报
回复
把编译环境 设置成控制台程序即可
lihongbin33 2008-03-28
  • 打赏
  • 举报
回复
注意查看选项 把需要的库编译到文件里而不是连接到文件即可!
cnzdgs 2008-03-27
  • 打赏
  • 举报
回复
在项目设置中先改成静态连接MFC,编译一下后再改回使用标准库。
arong1234 2008-03-27
  • 打赏
  • 举报
回复
带d的表示是debug版本,你在发布时不应该发布debug版本,而应该改成release版本编译发布(调试时用debug版本)

至于另外一个文件,这是要求在部署的机器上安装vc运行时和.net redistribution 包的,这个不安装是不行的
Dr.Yao 2008-03-27
  • 打赏
  • 举报
回复
说个最简单的办法
在项目属性中-> C/C++ -> 代码生成 -> 运行时库
使用 多线程/Mt 或者 多线程调试/Mtd 编译出来都不依赖动态链接库(MSVCR80(D).DLL for VC8)
而使用多线程DLL /MD 或者多线程DLL调试/MDd 编译出来则需要相应的动态链接库

在VC8中,如果使用/mt(d),编译出来的文件将会增大debug大约400多K,release大约50K
不过50K无所谓吧

如果你对这多出来的50K很不爽,或者真的有要求
你可以在release项目设置中使用/MD选项,并且做一些改变,使编译出来的程序动态链接 MSVCR.DLL 而不是 MSVCR80.DLL
具体做法如下:
从VC6中找来对应的库:MSVCRT.LIB/MSVCRTD.LIB(调试) ,注意,我指的是VC6的,VC8的名字一样但是版本完全不同的
你可以从网上找找下载过来,VC6的MSVCRT.LIB大约是231K
找来之后,放在你项目的随便一个目录中,然后在项目的连接选项里指定附加这个输入目录
这时你重新编译一下项目,可能会提示你很多诸如"error LNK2019: 无法解析的外部符号"之类的错误:
你需要关闭编译器的几个选项:
1.基本运行时检查 使用默认值
2.缓冲区安全检查 关闭


这样编译出来的程序你查看导入表使用的则是msvcr.dll,但是不推荐这么做...


15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧