ভিজ্যুয়াল সি ++: নির্দিষ্ট লিঙ্কারের সতর্কতাগুলি কীভাবে অক্ষম করবেন?


118

আমি সিজিএল থেকে একটি লাইব্রেরি ব্যবহার করছি যা আমার কোড সংকলনের লিঙ্কিংয়ের সময় এই ফর্মটির সংযোগের প্রচুর সতর্কতা উত্পন্ন করে:

warning LNK4099: PDB 'vc80.pdb' was not found with 'gmp-vc80-mt-sgd.lib' or at 'vc80.pdb'; linking object as if no debug info

আমি ভিজ্যুয়াল সি ++ / স্টুডিও 2008 এর অধীনে এই নির্দিষ্ট লিঙ্কারের সতর্কতাটি কীভাবে বন্ধ করব?

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


1
ভিএস ২০০৫ এর জন্য / উপেক্ষা করুন: 4099 জরিমানা কাজ করে।

/ উপেক্ষা: 4099 এখানে VS2008 দিয়ে সূক্ষ্ম কাজ করে।
টম

/ignore:4099সি ++ এর সাথে ভিজ্যুয়াল স্টুডিও 10 এ দুর্দান্ত কাজ করে। আমি সতর্কতা পেয়েছি LNK4099: PDB 'vc100.pdb' was not found with 'gtest_main-mdd.lib(gtest_main.obj)এবং এটিকে এটি সরিয়ে ফেলতে সক্ষম হয়েছি ।
মানোলেট


3
ভিএস2013 গ্রহণ / উপেক্ষা করুন: 4099 ঠিক জরিমানা :)
mlvljr

উত্তর:


101

অতিরিক্ত লিঙ্কার বিকল্প হিসাবে নিম্নলিখিতটি যুক্ত করুন:

 /ignore:4099

এটি প্রোপার্টি-> লিংকার-> কমান্ড লাইনে


5
আমার মনে হয় না / উপেক্ষা করা আছে। ত্রুটিগুলি এখনও তালিকাভুক্ত রয়েছে এবং / উপেক্ষা এমএসডিএন-তে নথিভুক্ত করা হয় না। আমি "LNK4075 কে সতর্ক করার জন্য 40 / অক্ষম করার চেষ্টা করছি: '/ উদ্বেগজনক: কোনও' স্পেসিফিকেশনের কারণে '/ সম্পাদনা সম্পাদনা' উপেক্ষা করে।
নিক দেশজার্ডিন্স


5
4099 সতর্কীকরণ জন্য কাজ করে না connect.microsoft.com/VisualStudio/feedback/details/176188/...
KindDragon

7
আপনি ব্যবহার / উপেক্ষা করতে পারেন: 4099 লিঙ্কার পতাকা হিসাবে, তবে একটি ধরা আছে। দুর্ভাগ্যক্রমে, মাইক্রোসফ্ট 4099 একটি অজ্ঞাত সতর্কতা করার সিদ্ধান্ত নিয়েছে, সুতরাং আপনাকে লিঙ্ক.এক্সে প্যাচ করতে হবে। কান্ড পাগল মনে হচ্ছে, তবে অন্য কোনও উপায় নেই। এখানে আরও বিশদ: বোতলজাতলতা / ডকস / লনক ৪০৯৯.ইচটিএমএল আমি হেক্স সম্পাদককে হেক্স সম্পাদক হিসাবে ব্যবহার করেছি এবং সেই পৃষ্ঠায় বর্ণিত বিবরণটি ভিএস 10 এর সাথে দুর্দান্ত কাজ করেছে। অর্ডারটি এখনও 4088, 4099, 4105.
আন্দ্রেস হাফারবার্গ

2
VS 2015 এ কাজ করে (প্রকল্পটি VS2013 টুলসেট ব্যবহার করছে, এটি কোনও পার্থক্য করে কিনা তা নিশ্চিত নয়)
এসিমিলেটার

50

2018-10-16 আপডেট করুন

রিপোর্ট করা হয়েছে, ভিএস 2013 হিসাবে, এই সতর্কতাটি অক্ষম করা যেতে পারে। @ মার্ক রান্সম এর মন্তব্য দেখুন।

আসল উত্তর

আপনি সেই নির্দিষ্ট সতর্কতাটি অক্ষম করতে পারবেন না।

জিওফ চ্যাপেলের মতে ৪০৯৯ সতর্কবার্তাটিকে এমনভাবে বিবেচনা করা উচিত যে তা উপেক্ষা করা খুব গুরুত্বপূর্ণ, এমনকি / ডাব্লুএক্স এর সাথে একযোগে ব্যবহার করে (যা সতর্কতাগুলিকে ত্রুটি হিসাবে বিবেচনা করবে এবং নির্দিষ্ট পরিস্থিতিতে সতর্কতাটিকে অন্য পরিস্থিতিতে উপেক্ষা করবে)

লিঙ্ক থেকে প্রাসঙ্গিক পাঠ্য এখানে:

বেশ অজানা সতর্কতা নয়

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

নিম্নলিখিত সতর্কতা নম্বরগুলি প্রভাবিত:

4200, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4219, 4231 and 4237

তিনি বলেন না যে "4099 সতর্কতা উপেক্ষা করা খুব গুরুত্বপূর্ণ"; এটি এটিকে বন্ধ করা যায় না এ বিষয়টি থেকে তিনি অনুমান করেন। (সেই লিঙ্কটিতে শূন্য অতিরিক্ত তথ্য আছে বলে এখানে উল্লেখ করা হয়েছে))
বেন এম

আপনার উদ্বেগের সমাধান করতে আপডেট করেছেন @ বেনএম
জন ওয়েলডন

1
এই উত্তরটি পুরানো , সতর্কবাণী অক্ষম করে 4099 ভিএস2017-এ আমার পক্ষে ভাল কাজ করেছে। এখানে মন্তব্য থেকে এটি প্রদর্শিত হয় এটি সম্ভবত VS2013 দিয়ে শুরু করে অক্ষম করা যেতে পারে।
মার্ক র্যানসম

10

(রেকর্ডের জন্য এবং এমএসডিএন ফোরামে থ্রেড অদৃশ্য হওয়ার আগে) আপনি সতর্কতাটি অক্ষম করতে পারবেন না (কমপক্ষে VS2010 এর অধীনে) কারণ এটি যে অক্ষম অক্ষম করা যাবে না সেই সতর্কতার তালিকায় রয়েছে (সুতরাং / wd4099 কাজ করবে না) , তবে পরিবর্তে আপনি যা করতে পারেন তা হ'ল প্যাচ লিঙ্ক.এক্সে (সাধারণত সি: \ প্রোগ্রাম ফাইলগুলি (x86) \ মাইক্রোসফ্ট ভিজ্যুয়াল স্টুডিও 10.0 \ ভিসি \ বিন \ লিংক.এক্সে) এটিকে তালিকা থেকে সরিয়ে দিতে। জ্যাকহ্যামারের মতো শোনাচ্ছে, আমি জানি। এটি যদিও কাজ করে।

উদাহরণস্বরূপ, আপনি যদি 4099-এর জন্য সতর্কতাটি সরাতে চান তবে একটি হেক্স সম্পাদক সম্পাদকের সাথে লিংক.এক্সে খুলুন, গোটো লাইন 15 এ0 যা 03 10 (4099-র জন্য সামান্য এন্ডিয়ান) পড়বে এবং এফএফ 00 এর সাথে প্রতিস্থাপন করুন (যা বিদ্যমান নেই)


5
আপনি ক্রম F8 0F 00 00 - 03 10 00 00 - 09 10 00 00 (4088, 4099, 4105 অল্প এন্ডিয়ানতে 32 বিট ডাবল শব্দ হিসাবে) সন্ধান করা উচিত। এটি amd64 / link.exe এ একই।
আন্দ্রেয়াস হাফবার্গ

8

অন্যের সুবিধার জন্য, আমি যদিও আমি যা করেছি তা অন্তর্ভুক্ত করব।

যেহেতু আপনি LNK4204 সতর্কতাগুলি উপেক্ষা করতে ভিজুয়াল স্টুডিও (আমার ক্ষেত্রে ২০১০) পেতে পারেন না, তাই আমার পন্থাটি যা চেয়েছিল তা দেওয়ার ছিল: পিডিবি ফাইল। যেহেতু আমি আমার ক্ষেত্রে ওপেন সোর্স লাইব্রেরি ব্যবহার করছি, আমার কাছে ইতিমধ্যে পিডিবি ফাইলগুলি তৈরির কোড রয়েছে।

কিন্তু, ডিফল্টরূপে পিডিএফ ফাইলগুলির সকলের নাম একই জিনিস: vc100.pdb আমার ক্ষেত্রে। আপনার প্রত্যেকটি .lib এর জন্য যেমন একটি .pdb প্রয়োজন, এটি একটি সমস্যা তৈরি করে, বিশেষত যদি আপনি চিত্রম্যাগিকের মতো কিছু ব্যবহার করেন যা প্রায় 20 টি স্ট্যাটিক .lib ফাইল তৈরি করে। আপনার একটি ডিরেক্টরিতে 20 টি lib ফাইল থাকতে পারে না (যা আপনার অ্যাপ্লিকেশনটির লিঙ্কারগুলি লাইব্রেরিতে লিঙ্ক করার জন্য উল্লেখ করে) এবং সমস্ত 20 .pdb ফাইলকে একই জিনিস বলা যেতে পারে।

আমার সমাধানটি হ'ল আমার স্থির লাইব্রেরি ফাইলগুলি পুনর্নির্মাণ করা এবং প্রোজেক্টের প্রতি সম্মানের সাথে .pdb ফাইলটির নামকরণের জন্য VS2010 কনফিগার করা। এইভাবে, প্রতিটি। লিবিব একই নামে .pdb পেয়ে যায় এবং আপনি আপনার প্রকল্পটি ব্যবহারের জন্য সমস্ত এলআইবি এবং পিডিবি একটি ডিরেক্টরিতে রাখতে পারেন।

সুতরাং "ডিবাগ" কনফিগারেটনের জন্য, আমি সম্পাদনা করেছি:

বৈশিষ্ট্য-> কনফিগারেশন বৈশিষ্ট্য -> সি / সি ++ -> আউটপুট ফাইল -> প্রোগ্রাম ডাটাবেস ফাইল নাম থেকে

$ (IntDir) ভিসি $ (PlatformToolsetVersion) .pdb

নিম্নলিখিত মান হতে:

$ (OutDir) ভিসি $ (PlatformToolsetVersion) ডি $ (ProjectName) .pdb

এখন অন্তর্বর্তী ডিরেক্টরিতে কোথাও কোথাও, .pdb ফাইলগুলি আউটপুট ডিরেক্টরিতে লেখা হয়, যেখানে .lib ফাইলগুলিও লেখা হচ্ছে, এবং সবচেয়ে গুরুত্বপূর্ণ, ডি + প্রকল্পের নামের প্রত্যয় দিয়ে তাদের নামকরণ করা হয়েছে । এর অর্থ প্রতিটি লাইব্রেরি প্রকল্প একটি প্রকল্প .lib এবং একটি প্রকল্প নির্দিষ্ট .pdb কে উন্নত করে u

আমি এখন আমার সমস্ত রিলিজ .lib ফাইল, আমার ডিবাগ .লিব ফাইল এবং ডিবাগ .পিডিবি ফাইলগুলিকে আমার বিকাশের সিস্টেমের এক জায়গায় এবং অনুলিপি মোডে 3 য় পক্ষের লাইব্রেরি ব্যবহার করে এমন প্রকল্পের পিডিবি আছে ডিবাগ মোডে এটির দরকার ফাইল।


2
আমি বলতে চাই এই হল প্রশ্নের উত্তর। লিঙ্কারটি প্যাচিংয়ের পরামর্শ যা বহু উত্তর ধারণ করে তা হ'ল আসিনাইন। মাইক্রোসফ্ট এই সতর্কতাটিকে অজ্ঞাতসারে পরিণত করার বিষয়ে "ভুল" হলেও।
ট্যামস সেজেলি

3
আপনি যদি উত্স থেকে গ্রন্থাগারটি সংকলন করে থাকেন তবে এটি সঠিক উত্তর answer তবে কিছু প্রোগ্রামের বাণিজ্যিক লাইব্রেরিতে নির্ভরতা থাকে যা .pdb ফাইল অন্তর্ভুক্ত করে না, সুতরাং তাদের জন্য একটি .pdb ফাইল উত্পন্ন করা কোনও বিকল্প নয়।
ব্রাইস ওয়াগনার

3

আমি সন্দেহ করি / উপেক্ষা করি এটি একটি ভিসি 6 লিঙ্ক.এক্সই বিকল্প। VS2005 এবং VS2008 এর লিঙ্কারের জন্য কোনও নথিভুক্ত / উপেক্ষা বিকল্প উপলব্ধ নেই, তবে লিঙ্কারটি কেবল "/ উপেক্ষা করুন: XXX" বিকল্পটি, কোনও ত্রুটি এবং কোনও প্রভাব দেখায় না looks


2
প্রকৃতপক্ষে, এটি লিঙ্কারের সতর্কতাগুলিকে উপেক্ষা না করার জন্য উত্সাহিত, সুতরাং উপেক্ষা করা পতাকাটি ভিসি 6 এর পরে নিষ্ক্রিয় করা হয়েছিল: বাইটস
ডটিক

/ উপেক্ষা আবার ভিএস2013 এ ব্যবহার করা যেতে পারে।
ফার্নান্দো গঞ্জালেজ সানচেজ

1

PDB ফাইলটি সাধারণত ডিবাগ তথ্য সঞ্চয় করতে ব্যবহৃত হয়। vc80.pdbটার্গেট অবজেক্ট ফাইলটি লিঙ্ক করার সময় ফাইলটি খুঁজে পাওয়া যায়নি বলে এই সতর্কতাটি ঘটেছিল । এখানে LNK4099 এ এমএসডিএন এন্ট্রি পড়ুন ।

বিকল্পভাবে, আপনি প্রকল্পের বৈশিষ্ট্যাবলী> লিংকার> ডিবাগিং> ডিবাগ তথ্য ক্ষেত্র উত্পন্ন থেকে ডিবাগ তথ্য উত্সাহ বন্ধ করতে পারেন।


3
ডিবাগ তথ্য বন্ধ করা লিঙ্কারের সতর্কতাগুলি সমাধান করে, তবে ব্রেক ব্রেকপয়েন্টগুলি ডিবাগ তথ্য ছাড়া কাজ করে না। এটি আমার পক্ষে খুব বেশি কার্যকর নয়।
আশ্বিন নানজাপ্পা

2
সতর্কতা বন্ধ করা কখনই সঠিক কাজ নয়। ওগুলি ঠিক করুন. আপনার পিডিবি খুঁজে পেতে হবে এবং এটি সঠিক জায়গায় অনুলিপি করা দরকার।
স্নিগ্ধভাবে

দীর্ঘশ্বাস, সত্য! দুঃখের বিষয় এই ক্ষেত্রে, আমি পিডিবি খুঁজে পাচ্ছি না।
আশ্বিন নানজাপ্পা

1
vc80.pdb কেবলমাত্র ভিসি 8 এর ডিফল্ট পিডিবি নাম। এই সতর্কতার সহজ অর্থ হ'ল সিজিএল লাইব্রেরির জন্য কোনও ডিবাগ তথ্য উপলব্ধ নেই। এটি উপেক্ষা করা নিরাপদ।
জয়েজি

1

সম্পাদনা করুন: vc80 / ভিসুয়াল স্টুডিও 2005, কিন্তু CGAL লাইব্রেরির ভিসুয়াল স্টুডিও 2008 / vc90 সংস্করণে (হয়তো ব্যবহার করবেন না থেকে এখানে )।

লিঙ্কার সরঞ্জামগুলি সতর্কতা LNK4099 :

আপনি / জেড 7 এর সাথেও সংকলন করতে পারেন, সুতরাং পিডিবি ব্যবহার করার দরকার নেই বা আপনার সাথে সংযুক্ত জিনিসগুলির জন্য .pdb ফাইল না থাকলে / DEBUG লিঙ্কার বিকল্পটি সরিয়ে ফেলুন।


2
ধন্যবাদ। / জেড 7 এর সাথে সংকলন এখনও সিজিএল লাইব্রেরির .pdb ফাইলের জন্য জিজ্ঞাসা করে। / ডিইবিইউজি লিঙ্কারের সতর্কতাগুলি সমাধান করে, তবে ব্রেক ব্রেকপয়েন্টগুলি ডিবাগ তথ্য ছাড়া কাজ করে না।
আশ্বিন নানজাপ্পা

1

@ জন ওয়েলডন বলেছিলেন, আপনি লিঙ্কার সতর্কতা 4099 অক্ষম করতে পারবেন না।

কিছু প্রকল্পের কনফিগারেশন পরিবর্তনগুলির সাথে আপনার গ্রন্থাগারটি পুনর্নির্মাণ করা উচিত। আপনার কাছে বেশ কয়েকটি বিকল্প রয়েছে:

  • ডিবাগের তথ্য সহ পিডিবি ফাইল সংরক্ষণ করুন যেখানে আপনি .lib ফাইলটি সংরক্ষণ করেন save বৈশিষ্ট্যগুলিতে "$ (আউটডির) $ (টার্গেটনেম) .pdb" সেট করুন -> সি / সি ++ -> আউটপুট ফাইল-প্রোগ্রাম ডাটাবেস ফাইলের নাম
  • .Lib ফাইলে ডিবাগের তথ্য সংরক্ষণ করুন। বৈশিষ্ট্যগুলিতে "C7 সামঞ্জস্যপূর্ণ (/ জেড 7)" সেট করুন -> সি / সি ++ -> সাধারণ-> ডিবাগ তথ্য ফর্ম্যাট
  • এই গ্রন্থাগারের জন্য প্রজন্মের ডিবাগ তথ্য অক্ষম করুন। বৈশিষ্ট্যগুলি থেকে মান সরান -> সি / সি ++ -> সাধারণ-> ডিবাগ তথ্য ফর্ম্যাট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.