编译链接过程中出现“无法解析的外部符号”,原因及解决办法总结

编译链接过程中出现“无法解析的外部符号”,原因及解决办法总结1、错误为:errorLNK2019:无法解析的外部符号___report_rangecheckfailure,该符号在函数_OBJ_create_objects中被引用 原因:__report_rangecheckfailure  是用来检查堆栈缓存溢出的,如果编译的时候打开GS(projectproperty–》Configurationproperties–》c/c++…

大家好,又见面了,我是你们的朋友全栈君。

1、错误为:error LNK2019: 无法解析的外部符号 ___report_rangecheckfailure,该符号在函数 _OBJ_create_objects 中被引用

 原因:__report_rangecheckfailure  是用来检查堆栈缓存溢出的,如果编译的时候打开GS(project property–》Configuration properties–》c/c++–》Code generation–》Buffer security check)选项时(GS编译选项解析),编译器将为你加入检测函数堆栈缓存溢出错误额外代码。具体实现在window下的运行时库文件msvcrt.dll中。而这些检查堆栈缓存溢出的代码中在msvcrt11.dll及以后版本中都会调用到__report_rangecheckfailure 函数,所以当你用vs2010及以前版本进行开发,并使用了由vs2012及以后编译器编译的库文件时,在链接的时候就会报这样的错误。

解决办法:打开项目属性,C/C++——代码生成——安全检查——禁用安全检查(GS)

2、可以明确知道无法解析的外部符号是某个自己编译的动态链接库的时候,多半是动态链接库引入不正确,不正确的原因:

(1)使用资源管理器,项目属性来连接的库。

》可能是lib没有引入正确,检查路径对不对,名称对不对。

选中项目名称右键——属性——连接器——常规——附加库目录——这里是lib文件所在的路径

选中项目名称右键——属性——连接器——输入——附加依赖性——这里是lib文件的名称,比如mmpadpater.lib

》也可能是没有把dll文件放到项目目录下面,网上有说放到输出目录的,有说和输出目录平级的,我感觉都可以,连接器会一个一个去找的。如果不放心,就两个地方都放。

》还可能是编译库用的位数和编译项目用的位数不同。

如果项目编译是32位,库编译用的是64位,那肯定会直接抛出错误的。

如果项目编译是64位,库编译用的是32位,那不会直接抛出错误,只有一个警告,但是,这个Warning也是问题的所在,你会发现无法解析的外部符号的问题,并且翻烂了网页试遍了各种办法还是不能解决。理论上64位的用32位的是没有问题的,我也不知道为什么。

(2)直接把lib文件添加进项目以引入库。

可能是没有把dll文件放进来

也可能是上面的bite问题。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/124921.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • bool类型_bool类型什么为真

    bool类型_bool类型什么为真转自:http://www.vcgood.com/archives/3709我们知道在C++里有专门的bool类型,用来表示真或假。但是在C语言里没有这样的类型(至少我是一直这么认为的),表达式的值0

    2022年8月5日
    9
  • JS兼容性处理

    JS兼容性处理

    2021年7月9日
    86
  • 23个项目管理经典案例_交互动画

    23个项目管理经典案例_交互动画javaScript动画项目案例示例代码:我的github1.动画库编写匀速运动案例一<!DOCTYPEhtml><htmllang=”en”><head><metacharset=”UTF-8″><metaname=”viewport”content=”width=device-width,in…

    2022年10月16日
    4
  • python中yield的用法详解——最简单,最清晰的解释

    python中yield的用法详解——最简单,最清晰的解释首先我要吐槽一下,看程序的过程中遇见了yield这个关键字,然后百度的时候,发现没有一个能简单的让我懂的,讲起来真TM的都是头头是道,什么参数,什么传递的,还口口声声说自己的教程是最简单的,最浅显易懂的,我就想问没有有考虑过读者的感受。接下来是正题:首先,如果你还没有对yield有个初步分认识,那么你先把yield看做“return”,这个是直观的,它首先是个return,普通的retur…

    2022年7月23日
    14
  • naviate15激活码(注册激活)2022.01.30

    (naviate15激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月31日
    40
  • 全部覆盖棋盘7×7_acwing题库

    全部覆盖棋盘7×7_acwing题库给定一个 N 行 N 列的棋盘,已知某些格子禁止放置。求最多能往棋盘上放多少块的长度为 2、宽度为 1 的骨牌,骨牌的边界与格线重合(骨牌占用两个格子),并且任意两张骨牌都不重叠。输入格式第一行包含两个整数 N 和 t,其中 t 为禁止放置的格子的数量。接下来 t 行每行包含两个整数 x 和 y,表示位于第 x 行第 y 列的格子禁止放置,行列数从 1 开始。输出格式输出一个整数,表示结果。数据范围1≤N≤100,0≤t≤100输出样例:8 0输出样例:32#include&l

    2022年8月9日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号