vs2010 编写DLL编译后怎么依赖那么多动态库?

xhz2000 2011-09-25 09:00:16
使用Depends工具查看,得到如下结果:

1.MSVCRT.DLL
2.MSVCP60.DLL
3.KERNEL32.DLL
4.USER32.DLL
5.NTDLL.DLL
6.GDI32.DLL
7.ADVAPI32.DLL
8.MSIMG32.DLL
9.POWRPROF.DLL
--------------------------
10.COMCTL32.DLL
11.SHLWAPI.DLL
12.OLEACC.DLL
13.GDIPLUS.DLL
14.IMM32.DLL
15.WINMM.DLL
16.OLEDLG.DLL
17.WINSPOOL.DRV
18.COMDLG32.DLL
19.SHELL32.DLL
------------------------------
20.OLE32.DLL
21.OLEAUT32.DLL
--------------------------------------


这样一来编译出来的DLL文件好大,如何减少不必要的DLL依赖??
...全文
817 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xhz2000 2011-10-09
  • 打赏
  • 举报
回复
放假回来。看到那么都兄弟的回复十分感谢。 这个DLL是一个朋友给的,朋友的是在VC6下开发的,他使用VC6编译出来的动态库真的就是一百多K,而且使用Depends工具查看也就是依赖4个DLL,然后我让他在vs2010试试,可是他也搞不出来,我才来发此帖问问。


Lactoferrin

(列宁) 这个兄弟说的好像有道理。


首先你要确定你自己的代码没有用到那些dll,选用动态c运行库
然后在连接器参数中自定义一个入口点,如果你已经有了DllMain就设为DllMain
去掉缓冲区安全检查:/GS-
把vc6的lib\msvcrt.lib复制过来,加入到你的工程的lib中,system32\msvcrt.dll是保证在nt系列的windows都有的
辰岡墨竹 2011-10-05
  • 打赏
  • 举报
回复
这个和依赖DLL没什么关系吧,只是你的DLL里依赖这些DLL,和你DLL大不大没有必然关系,因为它们又不是静态链接的,不在你的DLL文件里,相反应该很节约内存才对,因为DLL在物理内存中只有一份。
可能是你用MFC型的DLL了,你精简一下include的部分。或者改用纯Win32的DLL工程。
fly4free 2011-10-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xhz2000 的回复:]
比如 MSVCRT.DLL 微软c标准库,如果你用到了main 函数(基本肯定会用到),那就会加载这个dll

可我真的没有使用到main 函数 啊! 我是DLL没有用到的
[/Quote]

main主要是编程者写的,真正初始化进程的不是main,而且c/c++运行时,可不仅仅包括调用main函数的那个函数。

比如说,我的dll中用到了memcpy, 那么在我的vs2008中编译链接后的文件(debug)就依赖msvcr90d.dll


fly4free 2011-10-05
  • 打赏
  • 举报
回复
[Quote=引用楼主 xhz2000 的回复:]
这样一来编译出来的DLL文件好大,如何减少不必要的DLL依赖??
[/Quote]

我很纳闷,就是因为要依赖其他dll,才会小的,你怎么能说大呢?

几乎全部是静态链接的才会导致可执行程序变大呢……
小么小儿郎 2011-10-04
  • 打赏
  • 举报
回复
/MTd和/MT吧,省不少事。
Lactoferrin 2011-10-04
  • 打赏
  • 举报
回复
首先你要确定你自己的代码没有用到那些dll,选用动态c运行库
然后在连接器参数中自定义一个入口点,如果你已经有了DllMain就设为DllMain
去掉缓冲区安全检查:/GS-
把vc6的lib\msvcrt.lib复制过来,加入到你的工程的lib中,system32\msvcrt.dll是保证在nt系列的windows都有的
xhz2000 2011-09-27
  • 打赏
  • 举报
回复
比如 MSVCRT.DLL 微软c标准库,如果你用到了main 函数(基本肯定会用到),那就会加载这个dll

可我真的没有使用到main 函数 啊! 我是DLL没有用到的
aj3423 2011-09-26
  • 打赏
  • 举报
回复
用到了某dll的函数,这个dll就会被引入
比如 MSVCRT.DLL 微软c标准库,如果你用到了main 函数(基本肯定会用到),那就会加载这个dll

3.KERNEL32.DLL //可能只有这个是必须的

msdn上能查到每个api依赖的库,对应着精简就行
fengbingchun 2011-09-26
  • 打赏
  • 举报
回复
机子上只要是装的windows系统,很多都是不需要的
xhz2000 2011-09-25
  • 打赏
  • 举报
回复
新手问一下,怎么知道我使用了MFC库? 是不是跟#include 有关
罗平 2011-09-25
  • 打赏
  • 举报
回复
MFC,没有办法减少依赖,用纯C写吧。

15,471

社区成员

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

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