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



    本文转自fengyuzaitu 51CTO博客,原文链接:http://blog.51cto.com/fengyuzaitu/1946808,如需转载请自行联系原作者





相关文章
|
1月前
|
前端开发 Unix 开发工具
windows使用cygwin编译Xyce
windows使用cygwin编译Xyce
20 0
|
10月前
|
安全 Linux 编译器
【Linux编译器gcc/g++】带你了解代码是如何变成可执行程序的!
【Linux编译器gcc/g++】带你了解代码是如何变成可执行程序的!
|
11月前
|
开发者
Makefile常用命令详解
在软件开发中,Makefile是一种非常常用的自动化工具。Makefile文件包含了一系列规则,用于编译、打包、测试等操作,可以帮助我们自动化这些操作,提高项目的管理和编译效率。本文将介绍Makefile中常用的命令,以及如何使用它们来编译和管理项目
88 0
|
自然语言处理 编译器 Linux
【三、深入浅出GCC编译器】一个源文件到可执行文件是如何生成的:GCC编译工具链及编译参数详解(二)
【三、深入浅出GCC编译器】一个源文件到可执行文件是如何生成的:GCC编译工具链及编译参数详解
479 0
【三、深入浅出GCC编译器】一个源文件到可执行文件是如何生成的:GCC编译工具链及编译参数详解(二)
|
存储 Ubuntu Unix
【三、深入浅出GCC编译器】一个源文件到可执行文件是如何生成的:GCC编译工具链及编译参数详解(一)
【三、深入浅出GCC编译器】一个源文件到可执行文件是如何生成的:GCC编译工具链及编译参数详解
281 0
【三、深入浅出GCC编译器】一个源文件到可执行文件是如何生成的:GCC编译工具链及编译参数详解(一)
|
NoSQL 编译器 Linux
【三、深入浅出GCC编译器】一个源文件到可执行文件是如何生成的:GCC编译工具链及编译参数详解(三)
【三、深入浅出GCC编译器】一个源文件到可执行文件是如何生成的:GCC编译工具链及编译参数详解
244 0
【三、深入浅出GCC编译器】一个源文件到可执行文件是如何生成的:GCC编译工具链及编译参数详解(三)
|
Linux
LINUX编译m4
LINUX编译m4
110 0
|
Linux
LINUX编译spandsp
LINUX编译spandsp
95 0
|
NoSQL Linux 项目管理
linux系统编程 (四) gdb调试与makefile
linux系统编程 (四) gdb调试与makefile
143 0
linux系统编程 (四) gdb调试与makefile
|
Linux 开发工具 C++
Linux编译多个不同目录下的文件以及静态库、动态库的使用
先看两篇博文,作为基础知识。如果对C/C++编译链接过程都了解的话,可以跳过不看。 http://www.firedragonpzy.com.cn/index.php/archives/2556 http://www.
1801 0