作者:朱金灿
来源: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 LNK2001:unresolved external symbol
在使用不同版本opencv时,编译器有时会报错,error LNK1104 无法打开文件opencv_core245d.lib,本文给出了详细的解决方法,实测有效
阐述了C++中vc中error LNK2001 resolved external symbol _WinMain@16的解决方法的解决方法。
1>msvcrtd.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" ...这里是解决办法。不一定合适你,但是是我碰到的问题之一,找了好久才决解。
本篇文章是对fatal error LNK1104: 无法打开文件“libc.lib”的解决方法进行了详细的分析介绍,需要的朋友参考下
error LNK2019: 无法解析的外部符号 问题的解决办法,需要的朋友可以参考一下
(1)error LNK2001: unresolved external symbol _main 编号:LNK2001 直译:未解决的外部符号:_main。 错误分析:缺少main函数。看看main的拼写或大小写是否正确。 (2)error LNK2005: _main already defined in ...
VS2010 LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 的解决方法
解决方法 1.菜单project-》settnigs-》link-》Object/Library modules:中添加uafxcwd.lib (win7下亲测可用) 2. 如果还是不行,选择vc的全部安装,而不是默认安装 如果是unicode,可以用vc盘修复一下vc,钩选相关...
uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCMTD.lib(new.obj) uafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl ...
vc6.0运行一个mfc的例子,却有如下错误, LINK : fatal error LNK1104: cannot open file "mfc42ud.lib" 第一次遇到这种问题,经过本人不断探索发现该程序支持unicode原故, 附解决方法及所有库文件
odbccp32出现版本错误的解决方法 使用方法先将解压的dll放入系统文件夹, 然后执行regsvr32 %windir%\system32\dll /s注册
nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCMTD.lib(new.obj) nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl ...
连接器LNK是通过调用cvtres.exe完成文件向coff格式的转换的,所以出现这种错误的原因就是cvtres.exe出现了问题。
下面介绍解决的方法: 1. Windows子系统设置错误, 提示: libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main Windows项目要使用Windows子系统, 而不是Console, 可以这样设置: [Project] -...
提示出现unresolved external symbol _main搜了下找了下原因如下在创建MFC项目时, 不使用MFC AppWizard向导, 如果没有设置好项目参数, 就会在编译时产生很多连接错误, 如error LNK2001错误, 典型的错误...
解决办法: 项目->属性->链接器->常规 下面的“启用增量链接”,将“是(/INCREMENTAL)”改为“否(/INCREMENTAL:NO)”。 不过这又引入了另外一个警 告:FormatCom.obj : warning LNK4075: 忽略“/EDITANDCONTINUE”...
无法打开文件libc.lib。解决方法