VS编译链接错误集锦
1 场景
目前创新互联已为千余家的企业提供了网站建设、域名、雅安服务器托管、绵阳服务器托管、企业网站设计、新蔡网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
在同一个解决方案中,testdemo主程序模块会调用动态链接库zlib,因此在testdemo的项目中进行如下的属性设置:
链接器>输入>附加依赖项:zlib.lib
链接器>常规>附加库目录:..\outputs\release\lib
在重新生成解决方案的时候,会出现如下的错误:无法打开输入文件
步骤
查看到已经生成了zlib.lib文件,并且所有的环境配置正确,然后查看完整的编译过程,发现编译的次序不正确,首先编译testdemo主程序,然后再编译zlib模块,当然会出现问题
解决
点击testdemo项目,鼠标右键选择项目依赖项,选择zlib,确保首先编译zlib,最后编译主程序
问题2:fatalerror LNK1112: 模块计算机类型“MIPS”与目标计算机类型“THUMB”冲突
参考:http://www.jb51.net/softjc/83192.html
解决方案:请选择与解决方案相同的编译平台。
问题5:CXX0017: 错误: 没有找到符号test1d.dll test2d.dll
解决方案:由于解决方案中有些模块提供的是release版本的dll,所以无法将整个工程置于debug模式
,从debug调试出错的信息中最后的d代表的是debug调试版本的dll。所以
必须在解决方案配置中选择release
问题6:项目源码非常多,如果修改一个文件代码选择重新生成解决方案大概需要花费15分钟的时间,
目前没有测试过生成解决方案是否可以减少编译和链接的时间?
解决方案:修改某个文件之后不需要重新生成解决方案,然后直接开始执行调试,自动将修改的文件重
新编译。
问题7:error LNK2001: 无法解析的外部符号 "public: virtual class CTest::TCodeEntry const *
__thiscall CTest::CTestImpl::GetItemByCode(unsignedint)" (?GetItemByCode@CTest@CTestImpl
@@UAEPBVTCodeEntry@2@I@Z) testimpl.obj
解决方案:遇到这个问题,表示在链接的过程中,没有找到真正的实现,通过半小时的查阅代码发现如
下的问题:
引用class A
在函数Func(A a)中进行了调用,在实际的过程中,A被定义为了struct结构体类,这个时候链接的过程
中,就没有办法找到class A,这一点应该注意。
在实际的过程中,务必注意真正的实现和声明是否一致,这个非常重要。
问题8:error C2259TestQuery::CtestQueryImpl :can not instantiate abstract calss
解决方案:首先了解虚基类作为接口,所有的纯虚函数必须在子类中实现,否则编译出错,然后查看当
前的编译错误提示,说明目前的虚基类无法实例化,说明有纯虚函数没有实现,通过半个小时的代码查
阅,发现是子类的函数声明和基类的函数声明参数列表不一致,说明在拷贝代码的过程中出现错误,或
者修改代码,但是基类代码没有同步
1)查看继承的基类到底有多少个,这些基类的纯虚接口是否已经实现
2)查看派生类中是否有函数携带了=0的纯虚接口
3)最好的方法是删除以前的代码,重新编写一遍,语法的错误,无法在VS中显示。
问题9:无法打开包括文件: “corecrt.h”: No such file or directory
VS2013下编译jsoncpp正常,但是VS2015编译出现上面的错误,需要在包含路径中添加如下:
C:\Program Files (x86)\Windows Kits\10\Include\10.0.10150.0\ucrt
问题10:runtime error! abnormal program termination
说明:在安装VS2015的环境下,正常运行,在已有的环境,只是替换一下可执行程序,出现如上的错误,初步怀疑是某些动态库没有更新,因此重新拷贝所有的动态库,只是配置文件没有改动,暂时没有发现上面的问题
问题11:'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS
解决方式一:在调用函数的文件头部,调用预编译宏#pragma warning(disable:4996)
解决方式二:C/C++预编译器中填写_CRT_SECURE_NO_WARNINGS
可以采用strcpy_s函数,VS提供的安全拷贝函数,第二个参数指定了目标缓冲区的大小,如果源缓冲区过大,将会进行截取
网站标题:VS编译链接错误集锦
文章源于:http://hbruida.cn/article/jjiicp.html