为什么我的动态库.dll 链接的时候明明选的是静态库lib,最后却依赖于其他.dll?

bandaoyu 2018-05-23 08:40:54

用VS2010 编写的动态库my.dll,

vs my工程->属性->链接器->常规:附加库目录选择的 我自己的lib文件夹,里面有my.dll 依赖的静态库 dpende1.lib,dpende2.lib
vs my工程->属性->链接器->输入:附加依赖项:填的是dpende1.lib,dpende2.lib

然后 配置:活动release 平台:活动Win32

生成my.dll 给python调用,报错OSError: [WinError 126] 找不到指定的模块。


用vs tool工具查看my.dll的依赖项:
(方法见:https://blog.csdn.net/lyncai/article/details/11784471)

显示的结果是:

D:\>dumpbin /dependents my.dll
Microsoft (R) COFF/PE Dumper Version 10.00.30319.01
Copyright (C) Microsoft Corporation. All rights reserved.


Dump of file my.dll

File Type: DLL

Image has the following dependencies:

dpende1.dll
dpende2.dll
MSVCR100.dll
KERNEL32.dll

Summary

1000 .data
2000 .rdata
1000 .reloc
1000 .rsrc
9000 .text

D:\>




这是为什么呢? 我明明工程依赖的是lib库呀,这样一来,我要用这个my.dll还得拖家带口的带上 dpende1.dll, dpende2.dll才行?不是已经链接进到my.dll里面了吗?有谁知道该怎么弄吗?
...全文
1229 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
www_adintr_com 2018-06-01
  • 打赏
  • 举报
回复
重新编译 dpende1, dpende2 把工程的配置类型改成 静态库(.lib), 而不是 动态库(.dll)
bandaoyu 2018-06-01
  • 打赏
  • 举报
回复
顶顶顶顶顶顶顶顶顶顶
幻夢之葉 2018-05-27
  • 打赏
  • 举报
回复
引用 4 楼 bandaoyu 的回复:
所以我的问题转为 如何生成静态库 而不是导入库?)
你只能控制你的工程为静态库,你依赖的lib是静态库会嵌入到你的lib中,否则你还是需要带上依赖的dll给用户
bandaoyu 2018-05-27
  • 打赏
  • 举报
回复
引用 5楼幻夢之葉 的回复:
[quote=引用 4 楼 bandaoyu 的回复:] 所以我的问题转为 如何生成静态库 而不是导入库?)
你只能控制你的工程为静态库,你依赖的lib是静态库会嵌入到你的lib中,否则你还是需要带上依赖的dll给用户[/quote]我有依赖的导入库的工程,我应该怎么样把它编译成真正的静态库?要不然给第三方使用还得带上其他dll很不方便
bandaoyu 2018-05-26
  • 打赏
  • 举报
回复
引用 1 楼 paschen 的回复:
lib有分导入库l和静态链接库,前者实际的执行代码位于动态库中,导入库只包含了地址符号表等,确保程序找到对应函数的一些基本地址信息
原来如此!! 那么怎么样才能确保生成的是静态库而不是导入库呢? 导入库给第三方使用不方便,希望自己最终生成的DLL 不依赖于任何dll库,如何才能实现?
bandaoyu 2018-05-26
  • 打赏
  • 举报
回复
引用 3 楼 jianwen0529 的回复:
你使用到其他dll那么肯定有依赖的 你……
“ vs my工程->属性->链接器->常规:附加库目录选择的 我自己的lib文件夹,里面有my.dll 依赖的静态库 dpende1.lib,dpende2.lib vs my工程->属性->链接器->输入:附加依赖项:填的是dpende1.lib,dpende2.lib” 我的问题是,我的工程里面没有引用dll库,我引入的都是.lib文件。(当然这个问题paschen 老师已经告诉我 了,原来那些lib 不是静态库,而是导入库,也就是那些lib不独立还依赖于同名dll。所以我的问题转为 如何生成静态库 而不是导入库?)
幻夢之葉 2018-05-26
  • 打赏
  • 举报
回复
你使用到其他dll那么肯定有依赖的 你编译成静态库只是说你的工程生成一个lib,用户可以把此lib内嵌进exe或者dll中。 如果你的代码完全只是依赖系统自带的(比如c运行库),那么你就不需要打包依赖的dll给用户 但是你使用到第三方动态库(甚至vc的某些库)那你也需要打包
paschen 版主 2018-05-24
  • 打赏
  • 举报
回复
lib有分导入库l和静态链接库,前者实际的执行代码位于动态库中,导入库只包含了地址符号表等,确保程序找到对应函数的一些基本地址信息

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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