'রানটাইম লাইব্রারি'-এর জন্য মিল পাওয়া যায়নি


114

আমি সি: \ ক্রিপটপপে ক্রিপ্টো ++ ডাউনলোড এবং বের করেছি। আমি ভিতরে ভিজুয়াল স্টুডিও এক্সপ্রেস 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। আপনি ভিসিআপগ্রেড ব্যর্থতার লক্ষণগুলি দেখছেন যা আপনার কাছে সাফল্য হিসাবে প্রতিবেদন করা হয়েছিল ।
jwww

উত্তর:


233

(এটি ইতিমধ্যে মন্তব্যে জবাব দেওয়া হয়েছে, তবে যেহেতু এটির প্রকৃত উত্তর নেই , তাই আমি এটি লিখছি))

এই সমস্যাটি ভিজ্যুয়াল সি ++ এর নতুন সংস্করণগুলিতে উত্থিত হয়েছে (পুরানো সংস্করণগুলি সাধারণত নিঃশব্দে প্রোগ্রামটি যুক্ত করে এবং এটি ক্রশ হয়ে যাওয়ার সময় জ্বলে ওঠে) আপনার প্রোগ্রামের ভিতরে ফাইলগুলি) সিআরটি (সি রানটাইম লাইব্রেরি।) এর বিভিন্ন সংস্করণ ব্যবহার করছে

এই ত্রুটিটি সংশোধন করতে আপনাকে আপনার Project Properties(এবং / অথবা আপনি যে লাইব্রেরিগুলি ব্যবহার করছেন,) তারপরে প্রবেশ করতে হবে C/C++, তারপরে Code Generationএবং এর মান পরীক্ষা করতে হবে Runtime Library; এই জন্য ঠিক একই হতে হবে সব ফাইল এবং লাইব্রেরি আপনি একসাথে লিঙ্ক করা হয়। (ডিএলএলগুলির সাথে সংযোগের জন্য নিয়মগুলি কিছুটা স্বাচ্ছন্দ্যযুক্ত তবে আমি "কেন" এবং আরও বিশদে এখানে যাব না))

এই সেটিংটির জন্য বর্তমানে চারটি বিকল্প রয়েছে:

  1. মাল্টিথ্রেডড ডিবাগ
  2. মাল্টিথ্রেডড ডিবাগ ডিএলএল
  3. মাল্টিথ্রেডেড রিলিজ
  4. মাল্টিথ্রেডেড রিলিজ ডিএলএল

আপনার বিশেষ সমস্যাটি "মাল্টিথ্রেডড ডিবাগ" (অর্থাৎ স্ট্যাটিক মাল্টিথ্রেডড ডিবাগ সিআরটি) দিয়ে নির্মিত একটি প্রোগ্রামকে "মাল্ট্রিথ্রেডড ডিবাগ ডিএলএল " সেটিংস (অর্থাৎ ডায়নামিক মাল্টিথ্রেডড ডিবাগ সিআরটি) ব্যবহার করে নির্মিত হচ্ছে এমন একটি প্রোগ্রামের বিপরীতে আপনার লিঙ্কটি সংযুক্ত করা থেকে মনে হচ্ছে আপনার পরিবর্তন হওয়া উচিত You লাইব্রেরিতে বা আপনার প্রোগ্রামে এই সেটিংটি। আপাতত, আমি আপনার প্রোগ্রামে এটি পরিবর্তন করার পরামর্শ দিচ্ছি।

নোট করুন যেহেতু ভিজ্যুয়াল স্টুডিও প্রকল্পগুলি ডিবাগ এবং রিলিজ বিল্ডগুলির জন্য প্রজেক্ট সেটিংসের বিভিন্ন সেট ব্যবহার করে (এবং 32/64-বিট বিল্ডগুলি) আপনার অবশ্যই নিশ্চিত হওয়া উচিত যে এই সমস্ত প্রকল্পের কনফিগারেশনের মধ্যে সেটিংস মেলে।

(কিছু) আরও তথ্যের জন্য, আপনি এগুলি দেখতে পারেন (উপরের মন্তব্য থেকে লিঙ্কিত):

  1. লিঙ্কার সরঞ্জামগুলি এমএসডিএন- তে সতর্কতা LNK4098
  2. / এমডি, / এমএল, / এমটি, / এলডি (রান-টাইম লাইব্রেরি ব্যবহার করুন) এমএসডিএন - তে
  3. ভিসি 11 বিটা দিয়ে ত্রুটিগুলি তৈরি করুন - এমডিডি লাইবসকে এমডিডি এক্সের সাথে মেশানো বুজিলা @ মজিলায় লিঙ্ক করতে ব্যর্থ

আপডেট : (এটি এমন মন্তব্যের জবাবে যা এই কারণেই জিজ্ঞাসা করছে যে এই এত যত্ন নেওয়া উচিত))

কোডের দুটি টুকরা যা আমরা একত্রে সংযুক্ত করছি তারা যদি স্ট্যান্ডার্ড লাইব্রেরিটির সাথে লিঙ্ক করে এবং ব্যবহার করে থাকে তবে আমাদের দুটি কোডের টুকরা কীভাবে ইন্টারঅ্যাক্ট করে এবং ডেটা চারপাশে পাস করে সে সম্পর্কে মহান যত্ন নেওয়া না হলে স্ট্যান্ডার্ড লাইব্রেরি অবশ্যই তাদের উভয়ের জন্য সমান হবে । সাধারণত, আমি বলব যে প্রায় সমস্ত পরিস্থিতিতে কেবল স্ট্যান্ডার্ড লাইব্রেরি রানটাইমের ঠিক একই সংস্করণটি ব্যবহার করা হয় (ডিবাগ / রিলিজ, থ্রেড এবং স্পষ্টতই ভিজ্যুয়াল সি ++ এর সংস্করণ অন্যান্য বিষয়গুলির মধ্যে যেমন পুনরুক্তিকারী ডিবাগিং ইত্যাদি))

সমস্যার সর্বাধিক গুরুত্বপূর্ণ অংশটি হ'ল: একটি ফাংশন কলের উভয় পক্ষের অবজেক্টের আকার সম্পর্কে একই ধারণা থাকা

উদাহরণস্বরূপ বিবেচনা করুন যে কোডের উপরের দুটি টুকরা বলা হয় Aএবং B। এ স্ট্যান্ডার্ড লাইব্রেরির একটি সংস্করণের বিপরীতে সংকলিত , এবং বি অন্যটির বিপরীতে। এ এর দৃষ্টিতে কিছু এলোমেলো বস্তু যা একটি স্ট্যান্ডার্ড ফাংশন এটিতে ফিরে আসে (যেমন মেমরির একটি ব্লক বা একটি আয়রেটর বা কোনও FILEবস্তু বা যা কিছু) এর নির্দিষ্ট নির্দিষ্ট আকার এবং বিন্যাস থাকে (মনে রাখবেন যে কাঠামো বিন্যাস সি / সি সংকলনের সময় নির্ধারিত এবং স্থির করা হয়েছিল) সি ++।) বেশ কয়েকটি কারণে, একই বস্তুর আকার / বিন্যাস সম্পর্কে বি এর ধারণা আলাদা (এটি অতিরিক্ত ডিবাগ তথ্য, সময়ের সাথে সাথে ডেটা স্ট্রাকচারের প্রাকৃতিক বিবর্তন ইত্যাদি হতে পারে))

এখন, যদি A স্ট্যান্ডার্ড লাইব্রেরি কল করে এবং কোনও বস্তু ফিরে পেয়ে যায়, তবে সেই বস্তুটি B এর কাছে চলে যায়, এবং বি সেই উপায়ে যে কোনও উপায়ে ছুঁয়ে যায়, সম্ভাবনা রয়েছে যে বি সেই আপত্তিটি বিভ্রান্ত করবে (উদাহরণস্বরূপ ভুল ক্ষেত্রটি লিখুন, বা শেষের অতীতকে) এর, ইত্যাদি)

উপরেরগুলি একমাত্র ধরণের সমস্যা যা ঘটতে পারে তা নয়। স্ট্যান্ডার্ড লাইব্রেরিতে অভ্যন্তরীণ গ্লোবাল বা স্ট্যাটিক অবজেক্টগুলিও সমস্যার কারণ হতে পারে। এবং সমস্যাগুলির আরও অস্পষ্ট ক্লাস রয়েছে।

ডিবিএল (ডায়নামিক রানটাইম লাইব্রেরি) ব্যবহারের পরিবর্তে লিব্স (স্ট্যাটিক রানটাইম লাইব্রেরি) ব্যবহার করার সময় এগুলি কিছু দিক থেকে উদ্বেগজনক হয়

এই পরিস্থিতি দুটি টুকরা কোড ব্যবহার করে যে কোনও লাইব্রেরিতে প্রয়োগ করতে পারে যা একসাথে কাজ করে, তবে স্ট্যান্ডার্ড লাইব্রেরি বেশিরভাগ (প্রায় সমস্ত না থাকলে) প্রোগ্রামগুলি ব্যবহার করে এবং এটি সংঘর্ষের সম্ভাবনা বাড়িয়ে তোলে।

আমি যা বর্ণনা করেছি তা হ'ল প্রকৃত জলাবদ্ধতার নীচে জল দেওয়া এবং সরলিকৃত সংস্করণ যা আপনার জন্য অপেক্ষা করছে যদি আপনি গ্রন্থাগারের সংস্করণগুলি মিশ্রিত করেন। আমি আশা করি এটি আপনাকে কেন করবেন না এমন একটি ধারণা দেয়!


আমি একটু বিভ্রান্ত। ওপি এর ত্রুটি হয় LNK2038 । যেহেতু এটি সমস্ত লিবসের সাথে ঘটে না, আমি ক্রিপ্টোকে ++ ফিডলগুলি এমন কিছু সিআরটি সেটিংসের সাথে সন্দেহ করি যা সিআরটি স্বাদগুলিকে মিশ্রিত করা অসম্ভব করে তোলে - সাধারণত এটি কেবল একটি সতর্কতা (LNK4098) হয় এবং আপনি কী জানেন তা আপনি নিরাপদ থাকতে পারেন (প্রস্তাবিত নয়, তবে সীমাবদ্ধতার সাথে সম্ভব, উদাহরণস্বরূপ দেখুন stackoverflow.com/a/19944935/948581 )। যদিও ক্রিপ্টো ++ এইভাবে প্রভাবিত হয় তা আমি জানি না।

1
@ টিবো: এগুলি ডিএলএলগুলির জন্য লাইব্রেরি আমদানি করে না; আমি বিশ্বাস করি ক্রিপ্টো ++ আসলে এখানে প্রোগ্রামের সাথে স্থিতিশীলভাবে সংযুক্ত হচ্ছে। এর অর্থ হ'ল স্ট্যান্ডার্ড লাইব্রেরিতে কোনও মিল নেই যা অন্য মডিউলে অন্যটির সাথে যুক্ত হতে পারে (সম্ভবত) "একটি সংজ্ঞা বিধি" লঙ্ঘন করে। যা খারাপ। এটি কোনও ত্রুটি হিসাবে ব্যবহৃত হত না, যেহেতু লিঙ্কার এটি সনাক্ত করতে সক্ষম হয় নি (ফাংশন / প্রকারের নাম একই ছিল, তবে তাদের দেহ এবং সংজ্ঞা উল্লেখযোগ্যভাবে পৃথক হয়েছিল) VC10 অবধি লিঙ্কার / লাইব্রেরিয়ান মডিউলগুলিকে "ট্যাগিং" শুরু করেছিলেন এটি বিল্ডের কনফিগারেশন সম্পর্কে অতিরিক্ত তথ্যের সাথে উত্পাদিত হয়েছিল ...
yzt

@ টিবো: ... (পূর্ববর্তী মন্তব্য থেকে চালিয়ে যাওয়া) উদাহরণস্বরূপ, ওপি রিপোর্ট করছে ত্রুটিগুলির প্রথম ব্লকটি দেখুন। সেখানে, " রানটাইমলিবারি " হ'ল ক্রিপ্টো ++ লাইব্রেরি এবং ওপি প্রোগ্রামের জন্য অবজেক্ট ফাইল উভয়ের একটি ট্যাগ এবং এর একটির জন্য " এমডিডি_ডাইনামিকডিবুগ " এবং অন্যটির জন্য " এমটিডি_স্যাট্যাটিক ডেগগ "। এইভাবে, লিঙ্কার যে দুটি বস্তু ফাইলকে একসাথে লিঙ্ক করার চেষ্টা করছে তারা সম্পূর্ণ নতুন শ্রেণীর ত্রুটি সনাক্ত করতে এবং রিপোর্ট করতে পারে, এই কারণে যে object বস্তুগুলির ফাইল প্রস্তুতকারী লিংকাররা তাদের কোনও প্রাসঙ্গিক তথ্য, বিশেষত কোনও সেটিংস যা সম্ভাব্যভাবে ওডিআর লঙ্ঘন করবে তা ট্যাগ করে।
yzt

যদিও আমি আপনার সাথে বেশ একমত, এখানে এখনও রহস্যের একটি ক্ষেত্র রয়েছে। ওপি'র সমস্যা হিসাবে, আমি অনুমান করি যে তিনি ক্রিপ্টো ++ থেকে "dll.h" অন্তর্ভুক্ত করছেন এবং তারপরে ডিএলএল এর আমদানি লাইব্রেরির পরিবর্তে স্থির লিবের সাথে লিঙ্ক করার চেষ্টা করছেন। তবে আমি অন্য কম্পিউটারে নয়, একটি কম্পিউটারে ঠিক একই ত্রুটিগুলি দেখেছি (ভিএস2013 চূড়ান্ত এসপি 4 -> ত্রুটি, ভিএস2013 সম্প্রদায় এসপি 5 -> ঠিক আছে) ...

1
@ yzt আমি একটি সমাধান বের করেছি। / জেডডাব্লু সুইচ ব্যবহারের পরিবর্তে উইন্ডোজ সিএমএমের মাধ্যমে উইনআরটিআইপি ব্যবহার করার একটি উপায় সরবরাহ করে যা ডাব্লু আরআল নামে পরিচিত। এটি ঠিক যে / জেডডাব্লু ব্যবহার না করা কোডিংকে কিছুটা কঠিন করে তোলে কারণ এটি সিওএম বাস্তবায়ন বিশদটি গোপন করে তবে / জেডডাব্লু ছাড়াই উইনআরটি ব্যবহার করা সম্ভব।
সাহিল সিং

3

আমি সি: \ ক্রিপটপপে ক্রিপ্টো ++ ডাউনলোড এবং বের করেছি। আমি ভিতরে ভিজুয়াল স্টুডিও এক্সপ্রেস 2012 ব্যবহার করেছি সমস্ত প্রকল্পের ভিতরে (রিডমে নির্দেশিত) তৈরি করতে এবং সবকিছু সফলভাবে নির্মিত হয়েছিল। তারপরে আমি অন্য কয়েকটি ফোল্ডারে একটি পরীক্ষা প্রকল্প তৈরি করেছি এবং নির্ভরতা হিসাবে ক্রিপটলিব যুক্ত করেছি।

রূপান্তরটি সম্ভবত সফল হয়নি। সফল যে একমাত্র জিনিসটি ছিল ভিসিআপগ্রেড চালানো। প্রকৃত রূপান্তর নিজেই ব্যর্থ হয়েছে তবে আপনি যতক্ষণ না দেখছেন ততক্ষণ ততক্ষণ আপনি জানেন না। কিছু বিশদের জন্য, ক্রিপ্টো ++ উইকিতে ভিজ্যুয়াল স্টুডিও দেখুন ।


এটা ঠিক করার কোন ধারনা তোমার আছ?

আপনার সমস্যাগুলি সমাধান করার জন্য, আপনি vs2010.zipযদি স্ট্যাটিক সি / সি ++ রানটাইম লিঙ্কিং ( /MTবা /MTd) vs2010-dynamic.zipচান বা ডাউনলোড করতে চান তবে আপনি গতিশীল সি / সি ++ রানটাইম লিঙ্কিং ( /MTবা /MTd) চান। দু'জনই ভিসিআপগ্রেড দ্বারা উত্পাদিত সুপ্ত, নীরব ব্যর্থতা ঠিক করে।


vs2010.zip, vs2010-dynamic.zipএবং সর্বশেষতম গিটহাব উত্স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 । অনুপস্থিত শ্রেণীর ফাইলগুলির মধ্যে রয়েছে এইচকেডিএফ (5.6.3), আরডিআরএন্ড (5.6.3), আরডিএসইডি (5.6.3), চাচা (5.6.4), ব্ল্যাক 2 (5.6.4), পলি 1305 (5.6.4), ইত্যাদি include

ফিক্সটি হ'ল ভিজ্যুয়াল স্টুডিও প্রকল্প ফাইলগুলি থেকে নিখোঁজ উত্স ফাইলগুলি অপসারণ করা হবে যেহেতু তারা নিম্ন স্তরের প্রকাশের জন্য উপস্থিত নেই।

আরেকটি বিকল্প হ'ল সর্বশেষ উত্সগুলি থেকে হারিয়ে যাওয়া শ্রেণীর ফাইলগুলি যুক্ত করা, তবে জটিলতা থাকতে পারে। উদাহরণস্বরূপ, উৎস অনেক চতুরভাবে সর্বশেষ উপর নির্ভর config.h, cpu.hএবং cpu.cpp। "সূক্ষ্মতা" হ'ল আপনি বুঝতে পারবেন না যে আপনি একটি নিম্ন-সম্পাদিত ক্লাস পাচ্ছেন।

আন্ডার পারফর্মিং ক্লাসের একটি উদাহরণ হল BLAKE2। config.hসংকলন সময় এআরএম -32 এবং এআরএম -৪৪ সনাক্তকরণ যোগ করে। cpu.hএবং cpu.cppরানটাইম এআরএম নির্দেশ সনাক্তকরণ যুক্ত করে, যা সংকলন সময় সনাক্তকরণের উপর নির্ভর করে। আপনি যদি অন্য ফাইলগুলি ছাড়া BLAKE2 যুক্ত করেন তবে সনাক্তকরণের কোনওটিই ঘটে না এবং আপনি সরাসরি সি / সি ++ বাস্তবায়ন পান। আপনি সম্ভবত বুঝতে পারবেন না যে আপনি নিওন সুযোগটি হারিয়েছেন, যা ভ্যানিলা সি / সি ++ এর জন্য প্রায় 90 থেকে 12 সাইকেল-প্রতি-বাইট বনাম 40 সাইকেল-প্রতি-বাইট বা তার বেশি সঞ্চালিত হয়।


আমি ক্রিপ্টপ্প উইকির নির্দেশাবলী অনুসরণ করেছি, vs2010-dynamic.zip ডাউনলোড করে ক্রিপ্টোপ ৫5৩ কোডে এর বিষয়বস্তু আটকিয়েছি। নির্মিত এবং কিছু উত্স ফাইল অনুপস্থিত। উইকির কোনও সমস্যা নেই বলে জিপটি গিথুবের সর্বশেষ প্রকল্পের জন্য, এবং যে কোনও ফাইল হারিয়েছে। মোছা হয়েছে। এখন প্রকল্পটি কেবল নির্মাণ করে না: 4 টি লিঙ্ক ত্রুটি, একটি উদাহরণ: ত্রুটি LNK2001: অমীমাংসিত বাহ্যিক প্রতীক "শূন্য __cdecl আউটপুটResultOperations (চর কনস্ট *, চর কনস্ট *, বুল, স্বাক্ষরবিহীন দীর্ঘ, ডাবল)" "? জেড)
ইয়ানিভ

দেখা গেল একটি বেঞ্চ। সিপি রয়েছে যা প্রকল্পটি থেকে অনুপস্থিত ছিল। তবে তারপরেও এটি সংকলিত হয়নি যতক্ষণ না আমি এই ফিক্সটি fiptest.cpp এ প্রয়োগ করি github.com/weidai11/cryptopp/pull/151/files?diff=split আমি আশা করি তারা এই বিষয়ে কিছু অর্ডার করে, যেমন প্রকল্প জিপ ফাইল যুক্ত করুন গিট বা কিছু। এবং হ্যাঁ, আমি আমার সংকলকটি ভিএস ২০১৫ আপডেটটি বলতে অবহেলিত B নীচের লাইনটি, আমি যে ইঙ্গিতগুলি লিখেছি তা অনুসরণ করুন এবং এটি কার্যকর হয়।
ইয়ানিভ

@ ইয়ানিভ - প্রথম মন্তব্যের জন্য, অন্যান্য ব্যবহারকারীরা যাতে সমস্যায় না পড়ে সে জন্য আপনি কী প্রস্তাব করবেন? দ্বিতীয় মন্তব্যের জন্য, আমরা প্যাচটি সম্পূর্ণরূপে পরীক্ষা করে নিলে তা নেওয়ার পরিকল্পনা করি। এর মধ্যে আমরা কি কিছু করতে পারি? (আমি এই উত্তরে অতিরিক্ত তথ্য যুক্ত করেছি, তবে ব্যবহারকারীদের যাতে সমস্যা না হয় তা নিশ্চিত করতে চাই)।
jww

প্রথমত, এটি করার জন্য অনেক ধন্যবাদ। ক্রিপ্টো ++ সত্যিই শিলা। বিল্ড সমস্যা সম্পর্কিত, উইন্ডোজ স্লান এবং প্রকল্প ফাইলগুলি প্রকল্পের সর্বশেষ ফাইলগুলির সাথে সামঞ্জস্যপূর্ণ রাখার চেষ্টা করুন এবং এই পরিবর্তনগুলি যেহেতু, এই উইন্ডোজ বিল্ডটি কোনওভাবে কোডবেজের সাথে সংযুক্ত হওয়া উচিত এবং এমনকি উত্স ট্রিতে থাকা উচিত। যদি এটি খুব বেশি হয় তবে কমপক্ষে নিশ্চিত করুন যে ভিজ্যুয়াল স্টুডিও বিল্ড পরিবেশের সাথে জিপ ফাইলটি বর্তমান স্থিতিশীল অফিসিয়াল রিলিজের সাথে সামঞ্জস্যপূর্ণ compatible
ইয়ানিভ

Fiptest.cpp এর প্যাচ সম্পর্কিত - এটি VS2015 সম্পর্কে কিছু আলাদা বলে মনে হচ্ছে, সুতরাং আমি অনুমান করি যে VS2015 ব্যবহার করতে ইচ্ছুক যে কেউ এই প্যাচটি প্রয়োগ করতে হবে। এটি # আইডিডিএফ ব্লকের মধ্যে কেবলমাত্র অন্য একটি মামলা যা ভিএস ২০১৫ এর জন্য সঠিক ডিবাগ কলব্যাককে সংজ্ঞায়িত করে বলে মনে হচ্ছে এবং ম্যানুয়ালি প্যাচ করা সত্যিই সহজ।
ইয়ানিভ

3

ITERATOR_DEBUG_LEVEL এ অমিলের সাথে আমারও এই সমস্যা ছিল। রবিবার-সন্ধ্যা সমস্যা হবার পরেও ঠিক আছে এবং ভাল লাগছিল, তাই আমাকে কিছু সময়ের জন্য বাইরে রাখা হয়েছিল। ডি ভিএস ২০১7 আইডিই (সলিউশন এক্সপ্লোরার) এ কাজ করা আমি সম্প্রতি অন্য প্রকল্প থেকে আমার প্রকল্পের (সিআরটিএল-ড্রাগ) একটি সোর্সফাইলে রেফারেন্স যুক্ত / অনুলিপি করেছি। বৈশিষ্ট্যগুলি অনুসন্ধান করে- > সি / সি ++ / প্রিপ্রোসেসর - উত্স ফাইলের স্তরে, প্রকল্প স্তরের নয় - আমি লক্ষ্য করেছি যে একটি উত্স বিন্যাসে _DEBUG এই উত্স ফাইলের জন্য NDEBUG এর পরিবর্তে নির্দিষ্ট করা হয়েছিল। যা সমস্যা থেকে মুক্তি পাওয়ার জন্য প্রয়োজনীয় সমস্ত পরিবর্তন ছিল।


1

লিঙ্কার লাইব্রেরিতে msvcrtd.lib এর সিআরটি যুক্ত করে সমস্যার সমাধান করা যেতে পারে। কারণ cryptlib.lib ডিবাগের সিআরটি সংস্করণ ব্যবহার করেছিল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.