কীভাবে আমি "নিখোঁজ ডিএলএল" সমস্যা থেকে মুক্তি পেতে পারি?


15

আমি ভিজ্যুয়াল সি ++ 2015 এবং ওপেনএল দিয়ে কিছু গেম তৈরি করেছি। যখন আমি এটি আমার মেশিনে চালিত করি তখন কোনও সমস্যা ছিল না, তবে আমি যখন এটি অন্য মেশিনে চালিত করি তখন দেখা যায় যে কিছু ডিএলএল অনুপস্থিত রয়েছে। আমি কীভাবে নিশ্চিত হতে পারি যে এটি পরবর্তী সময়ে ঘটবে না এবং কী কী বিষয়গুলি বিবেচনা করা উচিত যাতে আমি ফাইলের অনুপস্থিত সমস্যা এড়াতে পারি?


8
প্রথমে নিশ্চিত করুন যে আপনি একটি প্রকাশ সংস্করণ তৈরি করছেন।
ব্যবহারকারী 253751

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

@ গিজমো একটি পরিশ্রম এখনও একটি উত্তর এবং মন্তব্যগুলি অস্থায়ী এবং তারা পোস্টের অধীনে থাকা স্পষ্ট করার জন্য ব্যবহৃত হয় এবং মুছে ফেলা হতে পারে। সুতরাং এটি কার্যকর হলে আপনার উত্তর হিসাবে এটি পোস্ট করা উচিত।
ব্যবহারকারী1306322

ঠিক আছে। আমি তখন উত্তর হিসাবে পোস্ট করব।
গিজমো

উত্তর:


22

এক্সিকিউটেবল চালাতে চায় এমন কোনও মেশিনে আপনি যে ভিজ্যুয়াল স্টুডিও ব্যবহার করেছেন তার সংস্করণের জন্য আপনাকে পুনরায় বিতরণযোগ্যগুলি ইনস্টল করতে হবে, যেমন ভিএস ২০১৫ এর জন্য https://www.microsoft.com/en-us/download/details.aspx?id=48145 । ডাইরেক্টএক্স বা অন্যান্য উপাদানগুলির জন্য আপনার পুনরায় তালিকার প্রয়োজনও হতে পারে।

অ্যাপ্লিকেশনগুলির ইনস্টলাররা সাধারণত তাদের যে কোনও নির্ভরতার জন্য সমস্ত পুনরায় বিতরণযোগ্য ইনস্টল করে। আপনি ইনোসেটআপ, এনএসআইএস, ডাব্লুআইএক্স, বা অন্যান্য বিভিন্ন সরঞ্জামের সাহায্যে এ ধরণের ইনস্টলার তৈরি করতে পারেন।

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


এই জাতীয় ইনস্টলার তৈরি করতে ভিএস ব্যবহার করা কি সম্ভব? আমি ভেবেছিলাম আমি একবার প্রকল্পের সেটিংসে ওয়ানক্লিক নামে কিছু দেখেছি।
ব্যবহারকারী1306322

@ ব্যবহারকারী1306322: অবশ্যই, গিজমোর প্রশ্নের মন্তব্যে একটি সমাধান উল্লেখ করা হয়েছিল। আপনি যে রানটাইমগুলি / ডিএলএলগুলির সাথে লিংক করছেন সেটি কেবলমাত্র বিষয়। ডিফল্ট সেটিংসটি আপনার সংস্করণ-নির্দিষ্ট সিআরটি ডিএলএল এর সাথে সংযোগ স্থাপন করেছে তবে লিঙ্কার বিকল্পগুলিতে মাক করে তা পরিবর্তন করা যেতে পারে। বিরুদ্ধে এই লিংকে MSVCRT.DLLপরিবর্তে (উইন্ডোজ নিজেই সঙ্গে অন্তর্ভুক্ত) MSVCPxxx.DLL(সংস্করণ-নির্দিষ্ট সংস্করণ ভিসুয়াল স্টুডিও রিলিজ সঙ্গে অন্তর্ভুক্ত)।
সান মিডলডিচ

অথবা আপনি যদি একটি সম্পূর্ণ ইনস্টলার ইনস্টলিং বোঝাতে চান তবে এটিই মূলত ডাব্লুআইএক্স । এটি একটি সাধারণ অতিরিক্ত জটিল এক্সএমএল-ভারী মাইক্রোসফ্ট ক্র্যাপস্টেপ, তবে এটি কার্যকর হয়। এছাড়াও এখানে "প্রকল্প ইনস্টলার" ব্যবহার করা হয়, যদিও আমি বিশ্বাস করে, তাদেরকে চলে গেছে যেহেতু 2013 বা 2015.
শন Middleditch

7

নিখোঁজ ডিএলএলগুলি সনাক্ত করতে আমি নির্ভরতা ওয়াকার ব্যবহার করি :

নির্ভরতা ওয়াকার মডিউল লোড এবং সম্পাদন সম্পর্কিত সমস্যা ত্রুটি সমাধানের জন্য খুব দরকারী। নির্ভরতা ওয়াকার অনেকগুলি সাধারণ অ্যাপ্লিকেশন সমস্যা যেমন: অনুপস্থিত মডিউলগুলি, অবৈধ মডিউলগুলি, আমদানি / রফতানির অনন্য ম্যাচগুলি, বিজ্ঞপ্তি নির্ভরতা ত্রুটিগুলি, মেশিনগুলির সাথে মেলে না মেশিনের মেশিনের প্রকারভেদ, এবং মডিউল শুরুর ব্যর্থতাগুলি সনাক্ত করে।


স্থায়ীভাবে ডিএলএল লিঙ্ক করতে ভিএসে একটি সংকলন-সময় বিকল্পও রয়েছে :

  • স্ট্যাটিকালি লিঙ্কিংয়ের অর্থ ডিএলএলগুলি এক্স ফাইলে অন্তর্ভুক্ত রয়েছে।
  • স্ট্যাটিকালি লিঙ্কিংয়ের ফলে EXE ফাইলের আকার বাড়ে।
  • স্ট্যাটিকালি লিঙ্ক করার অর্থ ডিএলএল এর এই সংস্করণটি সর্বদা ব্যবহৃত হবে।
  • তবে, স্ট্যাটিকালি লিঙ্কিংয়ের অর্থ হ'ল ডিএলএল হারিয়ে যাওয়া নিয়ে আপনার কখনও সমস্যা হবে না।

1
নির্ভরতা ওয়াকার বেশ পুরানো। এটি ডিএলএল লোড করার জন্য উইন্ডোজের পদ্ধতিগুলি যথাযথভাবে অনুকরণ করে না। প্রায়শই ডিএলএল সন্ধানে অক্ষম হওয়া সম্পর্কে বোগাস বার্তাগুলি নিয়ে যায়।
jpmc26

নির্ভরতার লাইসেন্সে স্ট্যাটিকাল লিঙ্কিং নিষিদ্ধ হতে পারে।
কীউইউএসআর

6

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

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

অপারেটিং সিস্টেমের সাথে অন্তর্ভুক্ত হওয়ার কারণে এতগুলি উইন্ডোজ গেমগুলির পরিবর্তে ডাইরেক্টএক্স ব্যবহার করার একটি কারণ এটি। দেখুন খেলা বিকাশকারীদের জন্য এমন Direct3D 11 ডিপ্লোয়মেন্ট এবং তাই সরাসরি সেটআপ


1
ওপেনগিএল পরামর্শটি পুরানো - প্রতিটি আধুনিক গ্রাফিক্স ড্রাইভার একটি আপ টু ডেট ওপেনএল আইসিডি নিয়ে আসে।
ব্যবহারকারী 253751

Ive ব্যক্তিগতভাবে এক বছরের কম বয়সী মেশিনে ওপেনজিএল ডিএলএল ইনস্টল করতে হয়েছিল
জেনমলক

@ জেনমলক জানান, বছরের পুরানো কম্পিউটারটিতে উইন্ডোজ পুনরায় ইনস্টল করার পরে, আপনি ঠিক বলেছেন। এনভিআইডিআইএ, এএমডি, বা ইন্টেল থেকে অফিসিয়াল ড্রাইভার প্যাকেজ ইনস্টল করার পরেও আপনি এই সমস্যাটি দেখতে পেয়েছেন?
দামিয়ান ইয়ারিক

2
@ জেনমলক - আপনি যদি ওপেনজিএল ডিএলএল ম্যানুয়ালি ইনস্টল করে থাকেন তবে আপনি ভয়াবহতার কিছু ভুল করছেন। যদি আপনি প্রকৃতপক্ষে "আপনার জিপিইউ বিক্রেতার ড্রাইভার ইনস্টল" বলতে চান তবে ইমিবিবস ঠিক এটিই বলেছেন।
ম্যাক্সিমাস মিনিমাস

@ জেনমলক - আহ, ততকালীন বাস্তব বিশ্বের সাথে প্রাসঙ্গিক নয়। যে পরিষ্কার করার জন্য ধন্যবাদ।
ম্যাক্সিমাস মিনিমাস

1

দাবি পরিত্যাগী: এটি একটি হল কার্যসংক্রান্ত , না একটি সমাধান আপনার উত্তর করার জন্য, কিন্তু এখনও, একটি খুব টেকসই সম্ভাবনা।

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

এখানে চিত্র বর্ণনা লিখুন

ত্রুটিগুলি কি কি?

  • এটি আপনার এক্সিকিউটেবল আকার এবং আপনার বাইনারি বাড়িয়ে তোলে (আপনি যদি কোনও গেম তৈরি করে থাকেন তবে এটি সম্ভবত নগণ্য)
  • এইভাবে সংকলিত রানটাইম dlls আপডেটগুলি থেকে উপকার পাবেন না। (যেমন যদি মাইক্রোসফ্ট ভিসি ++ 2015 এসপি 2, এসপি 3, এসপি 4 ইত্যাদি প্রকাশ করে) তবে এটি আপনার উপর নির্ভর করে।
  • আরও র‌্যাম ব্যবহার (তুচ্ছও নয়) কারণ আপনি বিদ্যমান / লোড কোড (ডিএলএল) পুনরায় ব্যবহার করবেন না
  • আপনার অবশ্যই নিশ্চিত হওয়া উচিত যে আপনার লিঙ্ক করা সমস্ত লাইব্রেরি একই রানটাইমের বিপরীতে সংকলিত আছে, অন্যথায় লিঙ্কিং ব্যর্থ হতে পারে, বা আকর্ষণীয় রানটাইম ত্রুটিগুলি ঘটতে পারে (সম্ভবত তা নয় তবে এটি আমার সাথে লিগ্যাসির প্রকল্পে একবার হয়েছিল যা আপডেট হয়েছিল নতুন ভিএস)

এবং কি লাভ?

  • আপনার এক্সিকিউটেবলের ভিএস থেকেই "বাহ্যিক" নির্ভরতা থাকবে না (কোনও এমএসভিসি * .ডিলের প্রয়োজন নেই)।
  • কিছু লোক এটিকে পারফরম্যান্স বৃদ্ধি হিসাবে দেখায় কারণ আপনি ডিএলএল কল ওভারহেড অপসারণ করছেন, যদিও এটি তাত্ত্বিকভাবে সত্য, উন্নতিগুলি অনুশীলনে নগন্য নয়

পরীক্ষা করে দেখুন এই লিঙ্কে আরও সম্প্রসারিত ব্যাখ্যা জন্য এবং pit- এবং downfalls আপনি একটি স্ট্যাটিক রানটাইম ব্যবহার করে সম্মুখীন হতে পারেন জন্য।

অন্য বিকাশটি হ'ল আপনার বাইনারি রয়েছে এমন সমস্ত প্রয়োজনীয় ডিএলএল স্থাপন করা। আপনার অ্যাপ্লিকেশন আপডেটগুলি (রানটাইম লাইব্রেরিতে) থেকে কোনও উপকার পাবে না তবে এটি but

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

ব্যবহারকারীকে সম্ভবত তার / তার জিপিইউ ড্রাইভার আপডেট করতে হবে তা নিশ্চিত করুন (যেমন অনেক অ্যাপ্লিকেশনের জন্য যেমন একাধিক রানটাইম রয়েছে, যেমন ওপেনজিএল, ভলকান)।


0

আমার সমাধানটি হ'ল ডিএলএল অনুলিপি করে আটকে দেওয়া হয়েছিল যা .sln ফাইলটি ভিজ্যুয়াল স্টুডিওতে অবস্থিত সেই ফোল্ডারে ত্রুটি সৃষ্টি করেছিল। #includeবিভাগের পরে , আমি লিখেছি #pragma comment (lib, "lost DLL name with .dll")এবং এটি সমাধান!

দ্রষ্টব্য: আমি তৃতীয় পক্ষের লাইব্রেরি (ভলকান এপিআই) ডিএলএল দ্বারা যে সমস্যার মুখোমুখি হয়েছি তা সমাধান করেছি। হয়তো এটি জানা যায় নি তবে 90% ভাগ্য ভাল কাজ করবে :)

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