关于error LNK 2005的解决办法
来源:互联网 发布:mac查看隐藏文件夹 编辑:程序博客网 时间:2024/06/06 18:43
一位网友看了我的《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 LNK 2005的解决办法
- 关于遇到的Lnk 2005的解决办法
- 关于ERROR LNK 2005错误
- 关于ERROR LNK 2005错误
- 关于ERROR LNK 2005错误
- 关于ERROR LNK 2005错误
- 关于ERROR LNK 2005错误
- 关于ERROR LNK 2005错误
- error lnk 1169错误的解决办法
- 关于error LNK:2019错误的札记
- zz:关于ERROR LNK 2005错误
- LNK ERROR 2005
- ERROR LNK 2005
- 【C++】关于error LNK 2019 无法解析的外部符号
- error lnk 2005 atlsd.lib
- LNK 2005 error 函数定义也是定义!!
- 一个Lnk 2005的错误
- 关于error LNK2005的解决办法
- 都前踊邮镜滓懊谘扒扒踪呈凸踪妊
- Windows 系统服务管理
- 快速搭建maven环境
- Unix/Linux环境C编程入门教程(17) Gentoo LinuxCCPP开发环境搭建
- Unity3D【脚本】鼠标对摄像机的控制 - 点击鼠标,摄像机围绕圆心旋转
- 关于error LNK 2005的解决办法
- 万能冒泡排序
- 时间复杂度和空间复杂度详解(转)
- uva 10593 - Kites(dp)
- iOS开发- UICollectionView详解+实例
- ExtJS3.4升级ExtJS4.2的问题汇总
- 【JDBC】java 操作oracle 建表,更新记录
- Android重写FragmentTabHost来实现状态保存
- 我是一完成if时归正罩