作者:朱金灿
来源:http://blog.csdn.net/clever101/

一位网友看了我的《VC和LUA混合开发之VC程序调用Lua脚本函数》,说参考了我做的,封装成自己的一个DLL 也是先把LUA编译成静态库,这个静态库我没改动。在MFC DLL中,我编译的话如果是静态MFC就会报错,如果是共享MFC 就不会 请问如何解决啊
报错信息如

//1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _strchr 已经在 libcmt.lib(strchr.obj) 中定义
//1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _fread 已经在 libcmt.lib(fread.obj) 中定义
//1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _feof 已经在 libcmt.lib(feoferr.obj) 中定义

我试了一下,确实如此。经分析,估计这是库冲突的问题,开始我采用忽略特定库办法,把MSVCRTD.lib忽略了,结果出现了另外错误:
1> uafxcwd.lib(appcore.obj) : error LNK2001: 无法解析的外部符号 ___wargv
1>uafxcwd.lib(appcore.obj) : error LNK2001: 无法解析的外部符号 ___argc

我发现这种解决办法有陷入恶性循环的势头。我分析了一下,估计是LUA工程和调用lua库的工程采用不同的运行时库的不同造成的,也就是解决这种问题的最好办法是:保证底层库和上层调用程序所用的运行时库的一致,就是两个工程的下图的选项设置必须一致,如下图:

当然如果你在MFC的使用选择"在静态库中使用 MFC",同时你又选择"多线程调试DLL (MDd)",编译器会提示一个错误:

1> c:/program files/microsoft visual studio 8/vc/atlmfc/include/afx.h(24) : fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]

这个提示很具体,就是你要么添加一个预处理器_AFXDLL,要么关闭/MD[d]。当然如果你在MFC的使用选择"在静态库中使用 MFC",同时你又选择"多线程调试(/MTd)",则啥事都没有。

总之,我觉得解决这类错误,最好的解决办法是保证底层库和上层调用程序所用的运行时库的一致,而不是会想忽略什么特定库,因为忽略特定库,既麻烦又可能陷入一个恶性循环(因为你不太清楚究竟该忽略哪些库,往往忽略这个库又冒出了其它问题)。

关于error LNK2005的解决办法相关推荐

  1. 安装32位mysql报错_在CentOS中安装32位或64位MySql报错error: Failed dependencies解决办法...

    在CentOS中安装MySql报错error: Failed dependencies解决办法 安装64位MySql报错内容如下: error: Failed dependencies: libaio ...

  2. 因为返回有true ajax提示进入错误,jquery ajax中error返回错误解决办法

    转自:https://www.jb51.net/article/72198.htm 进入百度搜索此问题,发现有人这么说了一句 Jquery中的Ajax的async默认是true(异步请求),如果想一个 ...

  3. Sub-process /usr/bin/dpkg returned an error code (1)解决办法

    在ubuntu 16.04更新了一些东西之后用apt装ros bringup包会出现如下错误: Sub-process /usr/bin/dpkg returned an error code (1) ...

  4. E: Sub-process /usr/bin/dpkg returned an error code (1)解决办法

    E: Sub-process /usr/bin/dpkg returned an error code (1)解决办法 安装libapache2-svn出现了这个错误,是由于apt-get安装软件时出 ...

  5. ERROR CODE: 0xC004F069 解决办法

    ERROR CODE: 0xC004F069 解决办法 安装office2016使用KMS命令激活时报ERROR CODE: 0xC004F069.从网上找了解决办法,为防止后期使用时忘记特此记录 问 ...

  6. Job for network.service failed because the control process exited with error code. 的解决办法

    问题描述: 在使用 Ubuntu-16.04.5 系统,由于设置了静态 IP 地址,在重启网卡服务器时,可能会出现 " Job for network.service failed beca ...

  7. apache安装错误error: APR notfound解决办法

    apache安装错误error: APR notfound解决办法 linux安装时安装种类不同,一些组件包可能不会被安装,导致linux下安装软件的时候缺这个缺那个,今天为大家介绍linux安装ap ...

  8. Cisco VPN出现Error 56的解决办法

    The Cisco Systems, Inc. VPN Service has not been started(Cisco VPN在Vista下出现Error 56的解决办法 services.ms ...

  9. nltk_data下载错误 Error loading stopwords urlopen error [Errno 11004] 解决办法

    nltk_data下载错误 Error loading stopwords: urlopen error [Errno 11004] 解决办法 [nltk_data] Error loading st ...

最新文章

  1. 如何使用PHP发送电子邮件?
  2. getRotationMatrix2D函数
  3. bugku——web 做题记录
  4. P1306-斐波那契公约数【矩阵乘法,数论】
  5. dj电商-项目开发流程
  6. 开源网格划分软件_网格划分:PointWise 18.3R1
  7. 字节跳动副总裁喊话腾讯:停止无理由封杀飞书;Git服务器配置错误导致日产汽车源码泄露;Linux5.10.5 发布
  8. 堆、栈、堆栈详谈--复习
  9. makefile中 = ,:=,+=有怎么区别?
  10. elasticsearch-6.1.2 x-pack java transport client客户端连接
  11. 凸优化学习(一)凸集与凸函数、凸优化问题
  12. 华为云云耀云服务器 中小企业的福音
  13. 低成本更清晰,下一代视频编码技术将如何实现这一目标?
  14. Typora Emoji图标
  15. ubuntu 桌面环境出现异常常用的解决方法
  16. C++11之emplace_back
  17. w8dns服务器未响应,必应输入法在Win8.1下设置属性显示不正常的解决方法
  18. 微滑低的简介。。。。
  19. python监控键盘按下事件_Python如何监控键盘按了什么键
  20. 使用R进行倾向得分匹配(PSM)

热门文章

  1. 软件采购必备:软件供应商评估表 之七(共七),结束!
  2. 智能wifi小车程序原理说明
  3. python练习习题集(含代码实例)
  4. 电脑华硕笔记本,华硕笔记本怎么样有哪些型号?哪个系列性价比高?
  5. 企业到底需要什么样的企业邮箱?
  6. 施耐德电气护航中国首台9.4T核磁共振成像系统稳定运行
  7. [转] PHP Security
  8. Web思维导图实现的技术点分析(附完整源码)
  9. fastdfs应用场景
  10. matlab pburg,现代数字信号处理——AR模型