libcurl 函数curl_easy_perform在release下崩溃的问题

今天遇到一个很奇怪的问题: 工程中用到了libcurl, debug可以正常运行,release每次都崩溃,断到curl_easy_perform这一行。堆栈中也得不到有用信息,于是GOOGLE一番,发现也有人遇到此问题,但没有找到有效的解决办法。简直有点懵........

另外又发现一奇怪的问题,用IDE运行release版本的程序,可以正常运行,脱离IDE双击直接运行也是崩溃,打开工程选项发现 Linker->System->Minimum Required Version 为空,果断添加5.01,重新编译,运行,问题解决了。

于是打包在测试机运行,提示缺少msvcp120d.dll msvcr120.dll mscrp120.dll 各种查找复制缺少的文件,仍然崩溃,远程调试发现 仍是函数curl_easy_perform 处崩溃。此时我发现 为什么我编译的release版依赖msvcp120d.dll呢?msvcp120d.dll明明是DEBUG版的用的么。怀疑工程中可能有错用的库,认真核对后发现sqlite 是DEBUG版的,替换之。bulid run 果然不再提示缺少msvcp120d.dll。

崩溃问题随之解决。

分析可能是libcurl引用了msvcp120.dll中的函数,而我的程序msvcp120d.dll, mscrp120.dll全部导入了,在函数定位上可能是本该在mscrp120.dll中定位的,由于msvcp120d.dll也存在,误导了函数定位,而引起的崩溃。

时间: 2025-02-01 15:00:55

libcurl 函数curl_easy_perform在release下崩溃的问题的相关文章

Objective-C与Swift下的自定义打印函数(Debug和Release)

1.Objective-C 在使用Objective-C进行开发的过程中,为了Debug会不断的设置打印函数.如下图是我们经常用的,用来测试监听方法的实现与否: 1 NSLog(@"%s", __func__); 2 NSLog(@"%s", __FUNCTION__); 需要说明的是,__func__和__FUNCTION__都是C的预定义符号,代表的含义完全相同,就是返回 类名+方法名 的字符串. 注意:1.返回的字符串是C语言的字符串 char * 类型,注意

dll的内存申请和释放问题--Debug程序正常而Release程序崩溃

C++编程中经常遇到这样的需求:主函数需要调用一个功能函数并返回一块大小不定的存储着处理结果的内存,这时容易想到两种选择:一是使用vector类型的引用作为形参,无需考虑内存问题:二是使用指针,在主函数中定义指针,而在功能函数中申请内存.这两种处理方法本来没有问题,但如果功能函数是dll中的函数,那么就需要十分小心了. 下面我们直接上结论: 1. 如果使用vector类型作为dll库函数的形参,那么一定不能在库函数中更改vector的大小,而只能更改vector的内容: 2. 如果使用指针,且在

VC6下 try catch 在release下的杯具(默认情况下,要加上throw语句catch才不会被优化掉)

IDE:VC6 今天遇到一个小问题,把我郁闷了好久,××医生的VulEngine不时在wcsstr处发生crash,加了一番强大的参数检查后,再加上了强大的try catch,其实不是很喜欢用try和catch,总觉得一个完美的程序,应该代码的每一处都可以被程序员控制的,我倾向如对函数的返回值和参数进行强制的检查,当然这就要求你自己设计的函数必须也得满足这些要求,不过事情牵扯到读写文件,处理字符串等等繁琐的操作,偶尔用一用try catch是比较简洁的,我在wcsstr前后加上异常处理代码后,d

Debug下正常release下程序出错

今天遇到一个奇怪的问题,debug下写的程序,换成release下运行就出错了.问题排查了一整天.原来链接的lib有误.qt库debug下的lib和release下的lib名字是不一样的. debug下的lib:QtCored4.libQtGuid4.libQtXmld4.libQtSqld4.lib release下的lib:QtCore4.libQtGui4.libQtXml4.libQtSql4.lib 转自: www.pailm.com

release下不输出NSLog打印的内容,debug下才输出。

软件运行越来越慢,突然在想,是不是因为NSLog,太多的原因.因为自己总是喜欢用NSLog打印出变量,然后,在进行调试程序,找Bug. 网上查找资料,果然,和这个还是有点关系的. 直接上代码,使其在release下不输出NSLog打印的内容,debug下才输出. 要注意,这部分代码是要写在prefix.pch中的. // 在debug模式下输出NSLog,在release模式下不输出NSLog #ifndef __OPTIMIZE__ #define NSLog(...) NSLog(__VA_

1、使用glob()函数依次获取当前路径下的所有文件

1 #!/usr/bin/perl 2 3 $tmp = 1; 4 foreach $var(glob("*.txt")) 5 { 6 if($tmp < 10) 7 { 8 $str = '000'.$tmp.'.txt'; 9 } 10 else 11 { 12 $str = '00'.$tmp.'.txt'; 13 } 14 print $tmp."\n"; 15 system("mv $var $str"); 16 $tmp++;

IOS 函数内 autorelease release

在一个有reurn 返回值的函数里 如果申请了一段内存的话(alloc 或者copy) 这个时候不能够release  只能够使用autorelease 在返回到那个被接受到的指针里,由它去进行释放!! 如果是self.obj(或者某些类对应的   SomeClass.obj)这种类型的,就需要把self.去掉(因为这样子的申请出来的内存引用计数会被retain+1了) 如果必须要有类名 SomeClass.   则需要用autorelease! IOS 函数内 autorelease rele

Windows内核函数(3) - 内核模式下的注册表操作

Windows内核函数(3) - 内核模式下的注册表操作 2010-12-13 13:37:16|  分类: 驱动编程 |  标签:status  hkey  ulsize  注册  kdprint  |举报|字号 订阅 注册表里的几个概念: 1.       创建关闭注册表项 NTSTATUS   ZwCreateKey(    OUT PHANDLE  KeyHandle,    IN ACCESS_MASK  DesiredAccess, //访问权限,一般为KEY_ALL_ACCLESS

关于VS2013优化后MFC中对文件读取失败的解析(debug下可以,release下失败)

经测试: 错误来源于:如下程序,在vs2010下使用GetFileName(),文件可以成功读取,但在VS2013下,使用GetFileName()读取文件在debug下可以,但release下失败,改为GetPathName()后,便可以成功编译. CFileDialog filePCloudDlg(TRUE); filePCloudDlg.m_ofn.lpstrTitle=_T("选择点云文件"); filePCloudDlg.m_ofn.lpstrFilter=_T("