बेमेल 'RuntimeLibrary' के लिए पता लगाया गया


114

मैंने C: \ cryptopp में Crypto ++ डाउनलोड और निकाला। मैंने विज़ुअल स्टूडियो एक्सप्रेस 2012 का उपयोग अंदर की सभी परियोजनाओं को बनाने के लिए किया (जैसा कि रीडमी में निर्देश दिया गया है), और सब कुछ सफलतापूर्वक बनाया गया था। फिर मैंने कुछ अन्य फ़ोल्डर में एक परीक्षण परियोजना बनाई और क्रिप्टोलिब को एक निर्भरता के रूप में जोड़ा। उसके बाद, मैंने शामिल पथ को जोड़ा ताकि मैं आसानी से सभी हेडर शामिल कर सकूं। जब मैंने संकलन करने की कोशिश की, तो मुझे अनसुलझे प्रतीकों के बारे में एक त्रुटि मिली।

उस उपाय को करने के लिए, मैंने C:\cryptopp\Win32\Output\Debug\cryptlib.libअतिरिक्त निर्भरता को जोड़ने के लिए जोड़ा । अब मुझे यह त्रुटि मिली:

Error   1   error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in program.obj    C:\Data\Work\C++ VS\CryptoTest\CryptoTest\cryptlib.lib(cryptlib.obj)    CryptoTest
Error   2   error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in program.obj    C:\Data\Work\C++ VS\CryptoTest\CryptoTest\cryptlib.lib(iterhash.obj)    CryptoTest
Error   3   error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in program.obj    C:\Data\Work\C++ VS\CryptoTest\CryptoTest\cryptlib.lib(sha.obj) CryptoTest
Error   4   error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in program.obj    C:\Data\Work\C++ VS\CryptoTest\CryptoTest\cryptlib.lib(pch.obj) CryptoTest
Error   5   error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in program.obj    C:\Data\Work\C++ VS\CryptoTest\CryptoTest\cryptlib.lib(misc.obj)    CryptoTest
Error   6   error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in program.obj    C:\Data\Work\C++ VS\CryptoTest\CryptoTest\cryptlib.lib(queue.obj)   CryptoTest
Error   7   error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in program.obj    C:\Data\Work\C++ VS\CryptoTest\CryptoTest\cryptlib.lib(algparam.obj)    CryptoTest
Error   8   error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in program.obj    C:\Data\Work\C++ VS\CryptoTest\CryptoTest\cryptlib.lib(filters.obj) CryptoTest
Error   9   error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in program.obj    C:\Data\Work\C++ VS\CryptoTest\CryptoTest\cryptlib.lib(fips140.obj) CryptoTest
Error   10  error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in program.obj    C:\Data\Work\C++ VS\CryptoTest\CryptoTest\cryptlib.lib(cpu.obj) CryptoTest
Error   11  error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in program.obj    C:\Data\Work\C++ VS\CryptoTest\CryptoTest\cryptlib.lib(mqueue.obj)  CryptoTest

मुझे भी मिलता है:

Error   12  error LNK2005: "public: __thiscall std::_Container_base12::_Container_base12(void)" (??0_Container_base12@std@@QAE@XZ) already defined in cryptlib.lib(cryptlib.obj)    C:\Data\Work\C++ VS\CryptoTest\CryptoTest\msvcprtd.lib(MSVCP110D.dll)   CryptoTest
Error   13  error LNK2005: "public: __thiscall std::_Container_base12::~_Container_base12(void)" (??1_Container_base12@std@@QAE@XZ) already defined in cryptlib.lib(cryptlib.obj)   C:\Data\Work\C++ VS\CryptoTest\CryptoTest\msvcprtd.lib(MSVCP110D.dll)   CryptoTest
Error   14  error LNK2005: "public: void __thiscall std::_Container_base12::_Orphan_all(void)" (?_Orphan_all@_Container_base12@std@@QAEXXZ) already defined in cryptlib.lib(cryptlib.obj)   C:\Data\Work\C++ VS\CryptoTest\CryptoTest\msvcprtd.lib(MSVCP110D.dll)   CryptoTest
Error   15  error LNK2005: "public: __thiscall std::locale::id::id(unsigned int)" (??0id@locale@std@@QAE@I@Z) already defined in cryptlib.lib(iterhash.obj) C:\Data\Work\C++ VS\CryptoTest\CryptoTest\msvcprtd.lib(MSVCP110D.dll)   CryptoTest
Warning 16  warning LNK4098: defaultlib 'LIBCMTD' conflicts with use of other libs; use /NODEFAULTLIB:library   C:\Data\Work\C++ VS\CryptoTest\CryptoTest\LINK  CryptoTest
Error   17  error LNK1169: one or more multiply defined symbols found   C:\Data\Work\C++ VS\CryptoTest\Debug\CryptoTest.exe 1   1   CryptoTest

जिस कोड को मैंने संकलित करने की कोशिश की वह सरल था (मुझे यह किसी अन्य साइट से मिला):

#include <iostream>
#include <string>
#include "sha.h"
#include "hex.h"
using namespace std;

string SHA256(string data) {
    byte const* pbData = (byte*) data.data();
    unsigned int nDataLen = data.size();
    byte abDigest[32];

    CryptoPP::SHA256().CalculateDigest(abDigest, pbData, nDataLen);

    return string((char*)abDigest);
}

int main(void) {

    return 0;
}

इसे ठीक करने का कोई तरीका? मुझे वास्तव में अभी केवल SHA-256 की आवश्यकता है, और कुछ नहीं। मैं विंडोज 7 64 बिट का उपयोग कर रहा हूं, और मैंने आज वीएस सी ++ डाउनलोड किया है, इसलिए यह सबसे नया संस्करण होना चाहिए।



1
मैंने अपनी परियोजना की रनटाइम लाइब्रेरी को मल्टी-थ्रेड डीबग में सेट किया (जो कि क्रिप्टो ++ में उपयोग की गई सेटिंग थी) और अब यह संकलन करता है! :) बहुत बहुत धन्यवाद।
मोमोंगा

आपके दौड़ने पर समस्याएं बहुत पहले हुईं VCUpgrade। आप VCUpgrad विफलता के लक्षण देख रहे हैं जो आपको सफलता के रूप में रिपोर्ट किया गया था ।
jww

जवाबों:


233

(यह पहले से ही टिप्पणियों में उत्तर दिया गया है, लेकिन चूंकि इसमें वास्तविक उत्तर का अभाव है , इसलिए मैं यह लिख रहा हूं।)

यह समस्या विजुअल C ++ के नए संस्करणों में उत्पन्न होती है (पुराने संस्करण आमतौर पर केवल चुपचाप प्रोग्राम से जुड़े होते हैं और यह क्रैश हो जाता है और रन टाइम पर जल जाता है।) इसका मतलब है कि आपके द्वारा लिंक किए जा रहे कुछ पुस्तकालयों (या स्रोत से भी कुछ)। आपके प्रोग्राम के अंदर की फाइलें) CRT के विभिन्न संस्करणों (C RunTime लाइब्रेरी ) का उपयोग कर रही हैं

इस त्रुटि को ठीक करने के लिए, आपको अपने Project Properties(और / या आपके द्वारा उपयोग किए जा रहे पुस्तकालयों में) जाने की आवश्यकता है C/C++, फिर में Code Generation, और फिर मूल्य की जांच करें Runtime Library; यह उन सभी फाइलों और पुस्तकालयों के लिए बिल्कुल समान होना चाहिए, जिन्हें आप एक साथ लिंक कर रहे हैं। (DLL के साथ लिंक करने के लिए नियम थोड़े अधिक आरामदायक हैं, लेकिन मैं "क्यों" और अधिक विवरण में नहीं जा रहा हूं।)

वर्तमान में इस सेटिंग के चार विकल्प हैं:

  1. बहुबली डिबग
  2. मल्टीग्रेडेड डीबग डीएलएल
  3. मल्टीथ्रेडेड रिलीज़
  4. मल्टीथ्रेडेड रिलीज़ DLL

"मल्टीथ्रेडेड डीबग सीआरटी" (यानी स्टैटिक मल्टीथ्रेड डिबग सीआरटी) के साथ निर्मित लाइब्रेरी को "मल्टीथ्रेड डिबग डीएलएल " सेटिंग (यानी डायनामिक मल्टीथ्रेड डिबग सीआरटी) का उपयोग करके बनाया जा रहा है । यह सेटिंग या तो लाइब्रेरी में, या आपके प्रोग्राम में। अभी के लिए, मैं आपके कार्यक्रम में इसे बदलने का सुझाव देता हूं।

ध्यान दें कि चूंकि Visual Studio प्रोजेक्ट्स डिबग और रिलीज़ बिल्ड (और 32/64-बिट बिल्ड) के लिए प्रोजेक्ट सेटिंग्स के विभिन्न सेट का उपयोग करते हैं, इसलिए आपको इन सभी प्रोजेक्ट कॉन्फ़िगरेशन में सेटिंग्स मैच सुनिश्चित करना चाहिए।

अधिक जानकारी के लिए (कुछ), आप इन्हें देख सकते हैं (ऊपर टिप्पणी से लिंक किया गया है):

  1. लिंकर उपकरण MSDN पर LNK4098 चेतावनी
  2. MSDN पर MD /, ML, / MT, / LD (रन-टाइम लाइब्रेरी का उपयोग करें)
  3. VC11 बीटा के साथ त्रुटियों का निर्माण करें - MDd exes के साथ MTd के लिबास को मिलाने पर Bugzilla @ Mozilla पर लिंक करना विफल हो जाता है

अद्यतन : (यह एक टिप्पणी के जवाब में है जो इस कारण पूछता है कि यह बहुत ध्यान रखा जाना चाहिए।)

यदि दो टुकड़े जो हम एक साथ जोड़ रहे हैं, वे स्वयं मानक पुस्तकालय के विरुद्ध लिंक कर रहे हैं और उपयोग कर रहे हैं, तो मानक पुस्तकालय को उन दोनों के लिए समान होना चाहिए, जब तक कि इस बात का बहुत ध्यान नहीं रखा जाता है कि हमारे दो कोड टुकड़े कैसे परस्पर संवाद करते हैं और डेटा के आसपास से गुजरते हैं। आम तौर पर, मैं कहूंगा कि लगभग सभी स्थितियों में मानक लाइब्रेरी रनटाइम के सटीक समान संस्करण (डिबग / रिलीज़, थ्रेड्स और स्पष्ट रूप से विज़ुअल C ++ का संस्करण, जैसे इट्रेटर डीबगिंग, आदि) का उपयोग किया जाता है।

समस्या का सबसे महत्वपूर्ण हिस्सा यह है: एक फ़ंक्शन कॉल के दोनों ओर वस्तुओं के आकार के बारे में समान विचार रखना

उदाहरण के लिए विचार करें कि कोड के ऊपर दो टुकड़े कहा जाता है Aऔर B। A मानक पुस्तकालय के एक संस्करण के विरुद्ध संकलित है , और B दूसरे के विरुद्ध। ए के विचार में, कुछ यादृच्छिक वस्तु जो एक मानक फ़ंक्शन वापस आती है (उदाहरण के लिए मेमोरी का एक ब्लॉक या एक एटरेटर या एक FILEऑब्जेक्ट या जो कुछ भी) का कुछ विशिष्ट आकार और लेआउट होता है (याद रखें कि संरचना लेआउट सी में संकलित समय पर निर्धारित और निर्धारित किया गया है / C ++।) कई कारणों में से, B का एक ही वस्तुओं के आकार / लेआउट के बारे में विचार अलग है (यह अतिरिक्त डिबग जानकारी, समय के साथ डेटा संरचनाओं के प्राकृतिक विकास आदि के कारण हो सकता है)

अब, यदि A मानक लाइब्रेरी को कॉल करता है और वापस ऑब्जेक्ट प्राप्त करता है, तो उस ऑब्जेक्ट को B में पास करता है, और B उस ऑब्जेक्ट को किसी भी तरह से छूता है, तो संभावना है कि B उस ऑब्जेक्ट को गड़बड़ कर देगा (जैसे कि गलत फ़ील्ड लिखें, या अंत को अतीत में लिखें। इसके आदि)

उपरोक्त केवल एक ही तरह की समस्या नहीं है जो हो सकती है। मानक पुस्तकालय में आंतरिक वैश्विक या स्थिर वस्तुएं भी समस्या पैदा कर सकती हैं। और साथ ही समस्याओं के अधिक अस्पष्ट वर्ग भी हैं।

यह सब कुछ पहलुओं के बदले DLLs (डायनेमिक रनटाइम लाइब्रेरी) का उपयोग करते समय प्राप्त होता है।

यह स्थिति कोड के दो टुकड़ों द्वारा उपयोग किए जाने वाले किसी भी पुस्तकालय पर लागू हो सकती है जो एक साथ काम करते हैं, लेकिन मानक पुस्तकालय का उपयोग सबसे अधिक (यदि लगभग सभी नहीं) कार्यक्रमों द्वारा किया जाता है, और इससे टकराव की संभावना बढ़ जाती है।

मैंने जो वर्णन किया है वह स्पष्ट रूप से वास्तविक गड़बड़ी का पानी और सरलीकृत संस्करण है जो आपको प्रतीक्षा करता है यदि आप लाइब्रेरी संस्करणों को मिलाते हैं। मुझे आशा है कि यह आपको एक विचार देता है कि आपको ऐसा क्यों नहीं करना चाहिए!


मैं थोड़ा असमंजस में हूँ। ओपी के त्रुटि है LNK2038 । जैसा कि सभी परिवादों के साथ नहीं होता है, मुझे कुछ क्रिप्टो सेटिंग्स के साथ क्रिप्टो ++ फ़िडल्स पर संदेह है जो सीआरटी फ्लेवर को मिलाना असंभव बनाते हैं - आमतौर पर यह सिर्फ एक चेतावनी (LNK4098) है और आप सुरक्षित हो सकते हैं यदि आप जानते हैं कि क्या करते हैं (अनुशंसित नहीं है, तो) लेकिन सीमाओं के साथ संभव है, उदाहरण के लिए देखें stackoverflow.com/a/19944935/948581 )। मुझे नहीं पता कि क्रिप्टो ++ इस तरह से क्यों प्रभावित होता है।

1
@Tibo: ये DLL के लिए लाइब्रेरीज़ आयात नहीं कर रहे हैं; मेरा मानना ​​है कि क्रिप्टो ++ वास्तव में यहां कार्यक्रम के साथ सांख्यिकीय रूप से जुड़ा हुआ है। इसका मतलब यह है कि मानक पुस्तकालय में किसी भी बेमेल को एक मॉड्यूल में दूसरे के साथ जोड़ा जा रहा है (संभवतः) "एक परिभाषा नियम" का उल्लंघन करता है। जो खराब है। यह एक त्रुटि नहीं हुआ करता था, क्योंकि लिंकर भी यह पता लगाने में सक्षम नहीं था (फ़ंक्शन / प्रकार के नाम समान थे, लेकिन वीसी 10 तक वीसी 10 तक उनके शरीर और परिभाषाओं में काफी अंतर था) जब लिंकर / लाइब्रेरियन ने मॉड्यूल को "टैग करना" शुरू किया था यह निर्माण के विन्यास के बारे में अतिरिक्त जानकारी के साथ निर्मित ...
yzt

@Tibo: ... (पिछली टिप्पणी से जारी) उदाहरण के लिए, ओपी रिपोर्टिंग कर रही त्रुटियों के पहले ब्लॉक को देखें। वहाँ में, " RuntimeLibrary " दोनों क्रिप्टो ++ पुस्तकालय और ओपी के कार्यक्रम के लिए वस्तु फ़ाइल पर एक टैग है, और उसके मान है " MDd_DynamicDebug उनमें से एक और" के लिए " MTd_StaticDebug अन्य के लिए"। इस तरह, जो लिंकर दो ऑब्जेक्ट फ़ाइलों को एक साथ जोड़ने की कोशिश कर रहा है, वह त्रुटियों की एक पूरी नई श्रेणी का पता लगा सकता है और रिपोर्ट कर सकता है, यह देखते हुए कि उन ऑब्जेक्ट फ़ाइलों का उत्पादन करने वाले लिंकर्स ने उन्हें किसी भी प्रासंगिक जानकारी, विशेष रूप से किसी भी सेटिंग्स के साथ टैग किया है जो संभवतः ओडीआर का उल्लंघन करेगा।
यीस्ट

जबकि मैं आपसे काफी सहमत हूँ, यहाँ अभी भी रहस्य का एक क्षेत्र है। ओपी की समस्या के लिए, मुझे लगता है कि वह क्रिप्टो ++ से "dll.h" शामिल है, और फिर DLL के आयात पुस्तकालय के बजाय स्थैतिक परिवाद के खिलाफ लिंक करने की कोशिश करता है। लेकिन मैंने एक कंप्यूटर पर एक ही त्रुटि देखी है, दूसरे पर नहीं (VS2013 परम sp4 -> त्रुटि, VS2013 समुदाय sp5 -> ठीक है) ...

1
@yzt मैंने एक समाधान निकाला। ZW swicth का उपयोग करने के बजाय, विंडोज़ WRL नामक एक आवरण का उपयोग करके COM के माध्यम से WinRT API का उपयोग करने का एक तरीका प्रदान करता है। यह सिर्फ इतना है कि COM कार्यान्वयन विवरण को छिपाने के बाद / ZW का उपयोग नहीं करना कोडिंग को थोड़ा मुश्किल बना देता है, लेकिन WinRT का उपयोग बिना / ZW के करना संभव है।
साहिल सिंह

3

मैंने C: \ cryptopp में Crypto ++ डाउनलोड और निकाला। मैंने विज़ुअल स्टूडियो एक्सप्रेस 2012 का उपयोग अंदर की सभी परियोजनाओं को बनाने के लिए किया (जैसा कि रीडमी में निर्देश दिया गया है), और सब कुछ सफलतापूर्वक बनाया गया था। फिर मैंने कुछ अन्य फ़ोल्डर में एक परीक्षण परियोजना बनाई और क्रिप्टोलिब को एक निर्भरता के रूप में जोड़ा।

रूपांतरण शायद सफल नहीं था। केवल एक चीज जो सफल थी वह थी VCUpgrad का चलना। वास्तविक रूपांतरण स्वयं विफल हो गया, लेकिन आप तब तक नहीं जानते जब तक आप जो त्रुटियां देख रहे हैं, उसका अनुभव नहीं करते। कुछ विवरणों के लिए, क्रिप्टो ++ विकी पर विजुअल स्टूडियो देखें ।


इसे ठीक करने का कोई तरीका?

अपने मुद्दों को हल करने के लिए, vs2010.zipयदि आप स्थिर सी / सी ++ रनटाइम लिंकिंग ( /MTया /MTd) vs2010-dynamic.zipचाहते हैं , या आप गतिशील सी / सी ++ रनटाइम लिंकिंग ( /MTया /MTd) चाहते हैं तो आपको डाउनलोड करना चाहिए । दोनों VCUpgrad द्वारा निर्मित अव्यक्त, मौन विफलताओं को ठीक करते हैं।


vs2010.zip, vs2010-dynamic.zipऔर नवीनतम GitHub स्रोतोंvs2005-dynamic.zip से बनाया गया है । इस लेखन (जून 1 2016) के अनुसार, यह प्रभावी रूप से प्री-क्रिप्टो ++ 5.6.4 है। यदि आप नीचे के क्रिप्टो ++ के साथ जिप फ़ाइलों का उपयोग कर रहे हैं, जैसे 5.6.2 या 5.6.3, तो आप छोटी-छोटी समस्याओं में चले जाएंगे।

दो छोटी समस्याएं हैं जिनसे मैं अवगत हूं। पहले का एक नाम bench.cppहैbench1.cpp । इसकी त्रुटि या तो है:

  • C1083: Cannot open source file: 'bench1.cpp': No such file or directory
  • LNK2001: unresolved external symbol "void __cdecl OutputResultOperations(char const *,char const *,bool,unsigned long,double)" (?OutputResultOperations@@YAXPBD0_NKN@Z)

फिक्स cryptest.vcxprojनोटपैड में या तो (1) खुला है, ढूंढना है bench1.cpp, और फिर इसका नाम बदलना है bench.cpp। या (2) का नाम बदलने bench.cppके लिए bench1.cppफाइल सिस्टम पर। कृपया इस फ़ाइल को न हटाएं।

दूसरी समस्या थोड़ी पेचीदा है क्योंकि यह एक चलती लक्ष्य है। 5.6.2 या 5.6.3 की तरह डाउन लेवल रिलीज़, GitHub में उपलब्ध नवीनतम कक्षाएं याद कर रही हैं । अनुपलब्ध वर्ग फ़ाइलों में HKDF (5.6.3), RDRAND (5.6.3), RDSEED (5.6.3), ChaCha (5.6.4), BLAKE2 (5.6.4), Poly1305 (5.6.4), आदि शामिल हैं।

फिक्स दृश्य स्टूडियो प्रोजेक्ट फ़ाइलों से अनुपलब्ध स्रोत फ़ाइलों को हटाने के लिए है क्योंकि वे डाउन लेवल रिलीज़ के लिए मौजूद नहीं हैं।

एक अन्य विकल्प नवीनतम स्रोतों से लापता वर्ग फ़ाइलों को जोड़ना है, लेकिन जटिलताएं हो सकती हैं। उदाहरण के लिए, कई स्रोत सूक्ष्मता से नवीनतम config.h, cpu.hऔर पर निर्भर करते हैं cpu.cpp। "सूक्ष्मता" यह है कि आपको एहसास नहीं होगा कि आपको एक अंडर-परफॉर्मिंग क्लास मिल रही है।

अंडर-परफॉर्मिंग क्लास का एक उदाहरण BLAKE2 है। config.hसंकलित समय ARM-32 और ARM-64 का पता लगाता है। cpu.hऔर cpu.cppरनटाइम एआरएम इंस्ट्रक्शन डिटेक्शन जोड़ता है, जो संकलन समय का पता लगाने पर निर्भर करता है। यदि आप अन्य फ़ाइलों के बिना BLAKE2 जोड़ते हैं, तो कोई भी पहचान नहीं होती है और आपको एक सीधा C / C ++ कार्यान्वयन मिलता है। आपको शायद एहसास नहीं होगा कि आपको NEON अवसर याद आ रहा है, जो लगभग 9 से 12 चक्र-प्रति-बाइट बनाम 40 चक्र-प्रति-बाइट या तो वेनिला C / C ++ के लिए चलता है।


मैंने क्रिप्टोपॉप विकी में निर्देशों का पालन किया, बनाम2010-dynamic.zip डाउनलोड किया और इसे क्रिप्टोप्ल 563 कोड पर सामग्री को चिपकाया। निर्मित और कुछ स्रोत फाइलें गायब मिलीं। कोई समस्या नहीं है विकी का कहना है कि जिप गिटब पर नवीनतम परियोजना के लिए है, और बस किसी भी लापता फ़ाइलों को हटा दें। हटाए गए। अब परियोजना सिर्फ निर्माण नहीं करती है: 4 लिंक त्रुटियां, एक उदाहरण: त्रुटि LNK2001: अनसुलझे बाहरी प्रतीक "शून्य __cdecl OutputResultOperations (char const *, char const *, bool, unsigned long, double)" (? OutputResultOperations @@ YAXPBD0_NKN @ @ जेड)
यानिव

पता चला कि एक बेंच थी। परियोजना से गायब था। लेकिन इसके बाद भी जब तक मैंने इस फिक्स को fiptest.cpp github.com/weidai11/cryptopp/pull/151/files?diff=split पर लागू नहीं किया, तब तक मैं नहीं चाहता कि वे इसमें कुछ आदेश दें, जैसे प्रोजेक्ट जिप फाइलें जोड़ना git या कुछ और में। और हां, मैंने यह कहने की उपेक्षा की कि मेरा कंपाइलर VS2015 अपडेट है। बॉटम लाइन, मेरे द्वारा लिखे गए संकेतों का पालन करें और यह काम करता है।
यानिव

@Yaniv - पहली टिप्पणी के लिए, आप क्या सलाह देते हैं ताकि अन्य उपयोगकर्ता समस्याओं का अनुभव न करें? दूसरी टिप्पणी के लिए, हम इसे पूरी तरह से जांचने के बाद पैच लेने की योजना बनाते हैं। क्या इस बीच हम कुछ कर सकते हैं? (मैंने इस उत्तर में अतिरिक्त जानकारी जोड़ी है, लेकिन मैं यह सुनिश्चित करना चाहता हूं कि उपयोगकर्ताओं को परेशानी न हो)।
jww

सबसे पहले, ऐसा करने के लिए बहुत बहुत धन्यवाद। क्रिप्टो ++ वास्तव में चट्टानों। बिल्ड समस्याओं के बारे में, प्रोजेक्ट में नवीनतम फ़ाइलों के साथ विंडोज़ स्लाइन और प्रोजेक्ट फ़ाइलों को संगत रखने का प्रयास करें, और निश्चित रूप से इन परिवर्तनों के बाद से, इन विंडोज़ बिल्ड को किसी तरह से कोडबेस से जोड़ा जाना चाहिए, और शायद स्रोत पेड़ पर भी होना चाहिए। यदि यह बहुत अधिक है, तो कम से कम सुनिश्चित करें कि दृश्य स्टूडियो बिल्ड वातावरण के साथ ज़िप फ़ाइल वर्तमान स्थिर आधिकारिक रिलीज़ के साथ संगत है।
यानिव

Fiptest.cpp के लिए पैच के बारे में - यह VS2015 के बारे में कुछ अलग प्रतीत होता है, इसलिए मुझे लगता है कि VS2015 का उपयोग करने के इच्छुक किसी व्यक्ति को इस पैच को लागू करने की आवश्यकता है। यह #ifdef ब्लॉक में सिर्फ एक और मामला है जो VS2015 के लिए सही डिबग कॉलबैक को परिभाषित करता है, और मैन्युअल रूप से पैच करना वास्तव में आसान है।
यानिव

3

ITERATOR_DEBUG_LEVEL में बेमेल के साथ मुझे यह समस्या थी। सब कुछ ठीक और अच्छा लगने के बाद रविवार की शाम की समस्या के रूप में, मुझे कुछ समय के लिए बाहर रखा गया। डे VS2017 आईडीई (सॉल्यूशन एक्सप्लोरर) में काम करते हुए मैंने हाल ही में अपने प्रोजेक्ट (ctrl-drag) से एक सोर्सफाइल रेफरेंस जोड़ा / कॉपी किया था। प्रॉपर्टीज में> सी / सी ++ / प्रीप्रोसेसर - सोर्स फाइल लेवल पर देख रहे हैं, प्रोजेक्ट लेवल पर नहीं - मैंने देखा कि एक रिलीज कॉन्फ़िगरेशन में इस सोर्स फाइल के लिए NDEBUG के बजाय _DEBUG को निर्दिष्ट किया गया था। जो समस्या से छुटकारा पाने के लिए आवश्यक सभी परिवर्तन थे।


1

लिंकर लाइब्रेरी में msvcrtd.lib के CRT को जोड़कर समस्या हल की जा सकती है। क्योंकि cryptlib.lib ने डीबग के CRT संस्करण का उपयोग किया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.