今天遇到一個很奇怪的問題: 工程中用到了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也存在,誤導了函數定位,而引起的崩潰。