温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

VS 编译链接错误集锦

发布时间:2020-07-02 13:00:22 来源:网络 阅读:965 作者:fengyuzaitu 栏目:系统运维

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提供的安全拷贝函数,第二个参数指定了目标缓冲区的大小,如果源缓冲区过大,将会进行截取


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI