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

编译链接过程中出现“无法解析的外部符号”,原因及解决办法总结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)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • Java数组循环_java遍历object数组

    Java数组循环_java遍历object数组数组:一组具有相同数据类型的集合(容器)1.数组声明格式:数据类型[]数组名=new数据类型[长度];数组长度一旦确定无法更改。数组里的数据必须是相同类型或自动向上转型后兼容的类型2.数组初始化1)静态初始化例:int[]i={1,2,3,4,’a’};Float[]f={1,2,3,4.0f};2)非静态初始化例:String[]str=newString[3…

    2022年9月19日
  • releasecapture 函数_整理怎么解释

    releasecapture 函数_整理怎么解释setCapture一.什么是setCapture函数?MDN解释:在处理一个mousedown事件过程中调用这个方法来把全部的鼠标事件重新定向到这个元素,直到鼠标按钮被释放或者document.releaseCapture()被调用。函数作用:程序中主要是要捕获onmousemove和onmouseup事件语法:element.setCapture(retargetToElement);如果被设置为true,所有事件被直接定向到这个元素;如果是false,事件也可以在这

    2022年5月3日
  • redis分布式锁原理面试(数据库索引用的什么数据结构)

    业务背景:后台定时任务刷新Redis的数据到数据库中,有多台机器开启了此定时同步的任务,但是需要其中一台工作,其他的作为备用,提高可用性。使用Redis分布式锁进行限制,拿到锁的机器去执行具体业务,拿不到锁的继续轮询。分布式锁原理分布式锁:当多个进程不在同一个系统中,多个进程共同竞争同一个资源,用分布式锁控制多个进程对资源的互斥访问。采用Redis服务器存储锁信息(即SET一个Key表示已加锁),可以实现多进程的并发读锁的状态,如果没有锁,则只允许一个进程加锁。Redis分布式锁实现的关键点:

    2022年4月15日
  • RPC是什么意思_sata2和sata3接口区别

    RPC是什么意思_sata2和sata3接口区别http和rpc特点区别

    2022年10月13日
  • fault.java.lang_如何解决mapping exception to axisfault

    fault.java.lang_如何解决mapping exception to axisfault这个涉及到两个地方,action和JS:我一般是这样写的,小例子,希望能对你有用:action:publicActionForwardgetFiled(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsException{Strings…

    2022年9月12日
  • futex机制介绍「建议收藏」

    futex机制介绍「建议收藏」1、概念futex:asortoffast,user-spacemutualexclusionprimitive. Futex是一种用户态和内核态混合的同步机制。首先,同步的进程间通过mmap共享一段内存,futex变量就位于这段共享的内存中且操作是原子的,当进程尝试进入互斥区或者退出互斥区的时候,先去查看共享内存中的futex变量,如果没有竞争发生,则只修改futex,而不用…

    2022年4月19日

发表回复

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

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