打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
warning LNK4070解决办法
warning LNK4070的解决办法
 
作者:朱金灿
来源:http://blog.csdn.net/clever101
 

       重命名了一个MFC常规DLL的工程文件(VS C++ 2005编译环境),结果在编译时出现这样的警告:1>B.exp : warning LNK4070: .EXP 中的 /OUT:A.dll 指令与输出文件名"..\outdir\Debug\B.dll"不同;忽略指令(这里假设原来的工程文件名叫A.vcproj,改名后叫B.vcproj)。后来我发现虽然输出为B.dll,但是对应的静态库B.lib被其它工程以隐式链接的方式调用时,使用的还是A.dll(这个可以使用Dependcies工具来查看),这样导致往往其它动态库不能加载成功(因为)。这下我不能把它仅仅当做warning而弃之不管了,于是上网查资料解决这个warning。查完资料,再结合自己的思考,大致明白了造成warning的原因。原来是虽然我修改了工程名,但是没有修改这个工程的def文件中LIBRARY字段的值,造成工程的输出文件和def文件的LIBRARY字段的值不一样。比如我把A.vcproj修改为B.vcproj,但在def文件还是LIBRARY "A"。这时只需将def文件中的LIBRARY字段修改为:LIBRARY "B"。这样就能完全消除这个警告。而被别的库以隐式链接调用也是以B.dll面目出现的。
 

链接警告:warning LNK4070: /OUT:dll.dll directive in .EXP
 

在生成dll时候经常出现lnk4070警告,尽管可能不会影响使用,但是也造成了一些麻烦诸如明明debug和release版本的lib名字不一样,可是exe却总是去找release版本的(debug的为结尾加了d的)。其实一直不晓得这个是怎么回事,也懒得去弄清楚了,反正能用就行了。今天看到一篇文章,恍然大悟!原来问题在这里,就是这个小小的warning造成了这一切。

先转帖如下: 引自地址http://hi.baidu.com/sonmeika/blog/item/726d47d0ccc5578ca1ec9c70.html

我在DLL项目中遇到了,因为要对Debug版和Release版分别指定不同的输出文件名。对Debug版,我指定输出文件为dllD.dll,对Release版指定为dllR.dll。

解决方法有两个:

(1)删掉自动生成的dll.DEF文件,在代码中使用_declspec(dllexport)导出函数;

(2)删掉dll.DEF文件中LIBRARY字段后面双引号及其内部的库名即可,也可以将其改掉。如改为:******************************************************************************************  

dll.def : Declares the module parameters for the DLL.  

LIBRARY      "dllD"
DESCRIPTION 'dll Windows Dynamic Link Library'              

EXPORTS    ; Explicit exports can go here
******************************************************************************************
还有更好方法:
1.生成两份DEF文件,
           xx.def //Release版本
           xxD.def //Debug版本
2.把这两个文件都添加到项目中
3.只要在Debug项目的Setting中选中xx.def,在右边的General中在Exclude file from built前打勾
同样在Release项目的Setting中选中xxD.def,在右边的General中在Exclude file from built前打勾
4.接下来就Betch Build吧


(#)
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
ATL链接错误"unresolved external symbol _main"
MSVC與CRT的恩怨情仇 >> 猴子靈藥 [Monkey Potion]
Visual C 开发工具与调试技巧整理 - zhangyuanlovelife的专栏 ...
error LNK2001;fatal error C1189等的解决办法
Visual C++ 6.0调试功能 图解教程(1)
常见的错误集合解决方案(一)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服