জিসিসি এবং এলডি সহ অব্যবহৃত সি / সি ++ চিহ্নগুলি কীভাবে সরিয়ে ফেলবেন?


110

আমাকে আমার নির্বাহযোগ্য মারাত্মকভাবে ( ARMউন্নয়ন) আকারটি অনুকূল করতে হবে এবং আমি লক্ষ্য করেছি যে আমার বর্তমান বিল্ড স্কিমে (gcc + ld) অব্যবহৃত চিহ্নগুলি ছিনিয়ে নেওয়া হচ্ছে না।

arm-strip --strip-unneededফলস্বরূপ এক্সিকিউটেবল / লাইব্রেরিগুলির জন্য ব্যবহারের ফলে এক্সিকিউটেবলের আউটপুট আকার পরিবর্তন হয় না (কেন জানি না, সম্ভবত এটি সহজভাবে পারে না)

আমার বিল্ডিং পাইপলাইনটি সংশোধন করার উপায় কী (যদি তা বিদ্যমান থাকে) , যাতে ফলস্বরূপ ফাইলটি থেকে অব্যবহৃত চিহ্নগুলি ছিনিয়ে নেওয়া যায়?


আমি এটি সম্পর্কেও ভাবব না, তবে আমার বর্তমান এম্বেড থাকা পরিবেশ খুব "শক্তিশালী" নয় এবং এমনকি ফলাফলের 500Kবাইরে সাশ্রয় 2Mকরা খুব দুর্দান্ত লোডিং পারফরম্যান্স বৃদ্ধির কারণ।

হালনাগাদ:

দুর্ভাগ্যবশত বর্তমান gccসংস্করণ আমি ব্যবহারের নেই -dead-stripবিকল্প এবং -ffunction-sections... + --gc-sectionsজন্যld ফলে আউটপুট জন্য কোনো উল্লেখযোগ্য পার্থক্য দেয় না।

আমি হতবাক হয়ে গিয়েছি যে এটি এমনকি একটি সমস্যা হয়ে দাঁড়িয়েছে, কারণ আমি নিশ্চিত ছিলাম যে gcc + ldঅব্যবহৃত চিহ্নগুলি স্বয়ংক্রিয়ভাবে ফেলা উচিত (কেন তাদের এমনকি এগুলি রাখতে হবে?)।


আপনি কীভাবে জানবেন যে প্রতীকগুলি ব্যবহার করা হয়নি?
zvrba

কোথাও রেফারেন্স নেই => চূড়ান্ত অ্যাপ্লিকেশনটিতে ব্যবহৃত হচ্ছে না। আমি ধরে নিয়েছি যে সংযোগ করার সময় / লিঙ্ক করার সময় কল গ্রাফ তৈরি করা খুব শক্ত হওয়া উচিত নয়।
ইপ্পি-কি-ইয়ে

1
আপনি কি মৃত প্রতীকগুলি সরিয়ে .o ফাইলের আকার হ্রাস করার চেষ্টা করছেন, বা আপনি একবার এক্সিকিউটেবল মেমোরিতে লোড করে আসল কোডের পদচিহ্নের আকার হ্রাস করার চেষ্টা করছেন? আপনি পরের দিকে "এম্বেডড" ইঙ্গিতগুলির সত্যতা; আপনি যে প্রশ্নটি জিজ্ঞাসা করেছেন তা পূর্বের দিকেই নিবদ্ধ বলে মনে হচ্ছে।
ইরা

@ ইরা আমি আউটপুট নির্বাহযোগ্য আকার হ্রাস করার চেষ্টা করছি, কারণ (উদাহরণস্বরূপ) যদি আমি boostলাইব্রেরি ব্যবহার করে এমন কিছু বিদ্যমান অ্যাপ্লিকেশন পোর্ট করার চেষ্টা করি , ফলে প্রাপ্ত .exeফাইলটিতে অনেক অব্যবহৃত অবজেক্ট ফাইল থাকে এবং আমার বর্তমান এম্বেড থাকা রানটাইমের স্পেসিফিকেশনগুলির কারণে , 10mbউদাহরণস্বরূপ, 500kঅ্যাপ্লিকেশন শুরু করা এর চেয়ে অনেক বেশি সময় নেয় ।
ইপ্পি-কি-ইয়ে

8
@ ইপ্পি: লোডের সময় কমাতে আপনি কোড থেকে মুক্তি পেতে চান; আপনি যে কোডটি থেকে মুক্তি পেতে চান সেটি হ'ল অব্যবহৃত পদ্ধতি / ইত্যাদি। গ্রন্থাগার থেকে। হ্যাঁ, এটি করার জন্য আপনাকে একটি কল গ্রাফ তৈরি করতে হবে। এটা এত সহজ নয়; এটি একটি বিশ্বব্যাপী কল গ্রাফ হতে হবে, এটি রক্ষণশীল হতে হবে (ব্যবহৃত হতে পারে এমন কিছু মুছে ফেলতে পারে না) এবং সঠিক হতে হবে (যাতে আপনি একটি আদর্শ কল গ্রাফের কাছাকাছি থাকতে পারেন, তাই আপনি সত্যই জানেন যে কী নেই ব্যবহৃত হয়)। বড় সমস্যাটি বিশ্বব্যাপী, নির্ভুল কল গ্রাফ করছে। এমন অনেক সংকলক জানেন না যা এইগুলি করে, লিঙ্কারগুলিকে ছেড়ে দিন।
ইরা

উত্তর:


131

জিসিসির পক্ষে এটি দুটি পর্যায়ে সম্পন্ন হয়েছে:

প্রথমে তথ্য সংকলন করুন তবে অনুবাদককে অনুবাদ ইউনিটের মধ্যে পৃথক বিভাগে পৃথক করতে সংকলককে বলুন। নিম্নলিখিত দুটি সংকলক পতাকা ব্যবহার করে এটি ফাংশন, শ্রেণি এবং বাহ্যিক ভেরিয়েবলের জন্য করা হবে:

-fdata-sections -ffunction-sections

লিঙ্কার অপ্টিমাইজেশান পতাকা ব্যবহার করে অনুবাদ ইউনিটগুলিকে একসাথে লিঙ্ক করুন (এর ফলে লিঙ্কারটি অননুমোদিত অংশগুলি বাতিল করতে পারে):

-Wl,--gc-sections

সুতরাং যদি আপনার কাছে টেস্ট.পি.পি. নামে একটি ফাইল থাকে যা এতে দুটি ফাংশন ঘোষিত ছিল, তবে তাদের মধ্যে একটি অপব্যবহার করা হয়েছে, আপনি অব্যবহৃত একটিটিকে জিসিসি (জি ++) এর জন্য নিম্নলিখিত কমান্ড দিয়ে বাদ দিতে পারেন:

gcc -Os -fdata-sections -ffunction-sections test.cpp -o test -Wl,--gc-sections

(দ্রষ্টব্য: -ও একটি অতিরিক্ত সংকলক পতাকা যা জিসিসিকে আকারের জন্য অনুকূল করতে বলে)


3
অনুগ্রহ করে নোট করুন এটি জিসিসির বিকল্প বিবরণ অনুসারে কার্যকর করার গতি কমিয়ে দেবে (আমি পরীক্ষা করেছি)।
রূপান্তর 21

1
সঙ্গে mingwযখন স্ট্যাটিক্যালি লিঙ্ক স্ট্যাটিক্যালি আগে থেকে libstdc ++ এবং পতাকা দিয়ে libgcc এই কাজ করে না -static। লিঙ্কার বিকল্পটি -strip-allবেশ খানিকটা সহায়তা করে, তবে এখনও ভিজ্যুয়াল স্টুডিও যা উত্পন্ন করবে তার থেকে উত্পন্ন এক্সিকিউটেবল (বা dll) প্রায় 4 উপায় বড়। পয়েন্টটি হল, কীভাবে libstdc++সংকলন করা হয়েছিল তাতে আমার কোনও নিয়ন্ত্রণ নেই । ldএকমাত্র বিকল্প থাকতে হবে ।
ফ্যাবিও

34

তাহলে এই থ্রেড বিশ্বাস করা হয়, তাহলে আপনি সরবরাহ করতে হবে -ffunction-sectionsএবং-fdata-sections জিসিসি, যা তার নিজস্ব ধারার প্রতিটি ফাংশন এবং ডাটা অবজেক্ট করা হবে হবে। তারপরে আপনি --gc-sectionsGNU ld কে অব্যবহৃত অংশগুলি সরিয়ে দিতে এবং দিতে পারেন।


6
@ এসএমএল্টারস: এটি ডিফল্ট নয়, কারণ এটি সি এবং সি ++ মান লঙ্ঘন করে। হঠাৎ করে বৈশ্বিক সূচনা হয় না, যার ফলস্বরূপ কিছু বিস্মিত প্রোগ্রামাররা থাকে।
বেন ভয়েগট

1
@ এসএমএলটার্স: আপনি যদি অ-মানক আচরণ-বিরতি বিকল্পগুলি পাস করেন তবেই আপনি ডিফল্ট আচরণ করার প্রস্তাব করেছিলেন।
বেন ভয়েগট

1
@ এসএমএলটারস: আপনি যদি এমন কোনও প্যাচ তৈরি করতে পারেন যা স্থির সূচনা চালায় তবে এবং যদি পার্শ্ব প্রতিক্রিয়াগুলি প্রোগ্রামের সঠিক অপারেশনের জন্য প্রয়োজনীয় হয় তবে তা দুর্দান্ত। দুর্ভাগ্যক্রমে আমি মনে করি এটি নিখুঁতভাবে করার জন্য প্রায়শই থামার সমস্যাটি সমাধান করা দরকার, তাই আপনাকে সম্ভবত কিছু সময় অতিরিক্ত কিছু প্রতীক অন্তর্ভুক্ত করতে ভুল করতে হবে। প্রশ্নটির মন্তব্যে ইরা যা বলেছিলেন তা মূলত তা। (বিটিডব্লিউ: "প্রোগ্রামটির সঠিক অপারেশনের প্রয়োজন নেই" "শব্দটি মানগুলিতে কীভাবে ব্যবহৃত হয় তার চেয়ে" অব্যবহৃত "এর আলাদা সংজ্ঞা)
বেন ভয়েগট

2
@ বেনভয়েগ সি-তে, বৈশ্বিক আরম্ভের পার্শ্ব-প্রতিক্রিয়া থাকতে পারে না (আরম্ভকারীদের অবশ্যই ধ্রুবক প্রকাশ হতে হবে)
এমএম

2
@ ম্যাট: তবে এটি সি ++ তে সত্য নয় ... এবং তারা একই লিঙ্কার ভাগ করে।
বেন ভোইগট

25

আপনি আপনার সিসি ও এলডি সংস্করণটির জন্য আপনার ডক্স পরীক্ষা করতে চাইবেন:

তবে আমার জন্য (ওএস এক্স জিসিসি ৪.০.১) আমি এগুলির জন্য এলডি পাই

-dead_strip

এন্ট্রি পয়েন্ট বা রফতানি প্রতীক দ্বারা অ্যাক্সেসযোগ্য ফাংশন এবং ডেটা সরান।

-dead_strip_dylibs

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

এবং এই সহায়ক বিকল্প

-why_live symbol_name

প্রতীক_নামে রেফারেন্সের একটি শৃঙ্খলে লগ করে। শুধুমাত্র সাথে প্রযোজ্য -dead_strip। এটি ডিবাগ করতে সহায়তা করতে পারে যা আপনি মনে করেন যে মৃত স্ট্রিপটি মুছে ফেলা উচিত সেটিকে কেন সরানো হয়নি।

গিসি / জি ++ ম্যানেজে একটি নোটও রয়েছে যে কয়েকটি ধরণের ডেড কোড নির্মূলকরণ কেবল তখনই সম্পাদিত হয় যখন সংকলন করার সময় অপ্টিমাইজেশন সক্ষম করা হয়।

এই বিকল্পগুলি / শর্তাদি আপনার সংকলকটির জন্য নাও থাকতে পারে, তবে আমি আপনাকে আপনার ডক্সে অনুরূপ কিছু সন্ধান করার পরামর্শ দিচ্ছি।


এটি কিছুই করে বলে মনে হচ্ছে না mingw
ফ্যাবিও

-dead_stripএকটি gccবিকল্প নয়।
ar2015

20

প্রোগ্রামিং অভ্যাস খুব সাহায্য করতে পারে; যেমন staticএকটি নির্দিষ্ট ফাইলের বাইরে অ্যাক্সেস না করা ফাংশন যুক্ত করুন; চিহ্নগুলির জন্য ছোট নামগুলি ব্যবহার করুন (কিছুটা সাহায্য করতে পারেন, সম্ভবত খুব বেশি নয়); const char x[]যেখানে সম্ভব ব্যবহার করুন ; ... এই কাগজটি , যদিও এটি গতিশীল ভাগ করে নেওয়া অবজেক্টগুলির বিষয়ে কথা বলে, এমন পরামর্শ থাকতে পারে যা অনুসরণ করা হলে, আপনার চূড়ান্ত বাইনারি আউটপুট আকারকে ছোট করতে সহায়তা করতে পারে (যদি আপনার লক্ষ্যটি ELF হয়)।


4
এটি কীভাবে চিহ্নগুলির জন্য সংক্ষিপ্ত নামগুলি চয়ন করতে সহায়তা করে?
ফুজ

1
যদি প্রতীকগুলি সরিয়ে না ফেলা হয় তবে va va sans ਡਾਇਰ — তবে মনে হয় এটি এখনই বলা দরকার।
শিনটেকজৌ

@ ফুজ কাগজটি ডায়নামিক শেয়ার্ড অবজেক্টের বিষয়ে কথা বলছে (যেমন .soলিনাক্সে), তাই প্রতীকের নামগুলি ধরে রাখতে হবে যাতে পাইথনের ctypesএফএফআই মডিউলের মতো এপিআইগুলি রানটাইমের সময় নামগুলি সহ প্রতীকগুলি সন্ধান করতে ব্যবহার করতে পারে।
ssokolow

18

উত্তরটি হ'ল -flto। আপনাকে এটি আপনার সংকলন এবং লিঙ্ক দুটি পদক্ষেপেই পাস করতে হবে, অন্যথায় এটি কিছুই করে না।

এটি আসলে খুব ভালভাবে কাজ করে - আমি যে মাইক্রোকন্ট্রোলার প্রোগ্রাম লিখেছি তার আকারটি এর আগের আকারের 50% এরও কম করে ফেলেছে!

দুর্ভাগ্যক্রমে এটিকে কিছুটা কৃপণ বলে মনে হয়েছিল - আমার কাছে জিনিসগুলি সঠিকভাবে তৈরি না হওয়ার উদাহরণ রয়েছে। এটি যে বিল্ড সিস্টেমটি আমি ব্যবহার করছি (কিউবিএস; এটি খুব নতুন) এর কারণে হতে পারে, তবে যে কোনও ক্ষেত্রে আমি আপনাকে কেবলমাত্র যদি সম্ভব হয় তবে আপনার চূড়ান্ত বিল্ডের জন্য এটি সক্ষম করে দেওয়ার পরামর্শ দিয়ে থাকি এবং এটি যে বিল্ডটি পুঙ্খানুপুঙ্খভাবে পরীক্ষা করে।


1
"-ডাব্লুএল, - জিসি-বিভাগগুলি" মিনজিডব্লিউ-ডাব্লু 6464-তে কাজ করে না, "-ফ্ল্টো" আমার পক্ষে কাজ করে। ধন্যবাদ
rhbc73

আউটপুট অ্যাসেমব্লিটি খুব অদ্ভুত বলে -fltoআমি বুঝতে পারি না এটি পর্দার আড়ালে কী করে।
ar2015

আমি বিশ্বাস করি -fltoএটি প্রতিটি ফাইলকে সমাবেশে সংকলন করে না, এটি তাদের এলএলভিএম আইআর সংকলন করে, এবং তারপরে চূড়ান্ত লিঙ্কটি তাদের সংকলন করে যেন তারা সমস্তই একটি সংকলনের ইউনিটে ছিল। এর অর্থ এটি অব্যবহৃত ফাংশনগুলি এবং ইনলাইন অ-কাজগুলি staticএবং সম্ভবত অন্যান্য জিনিসগুলিও মুছে ফেলতে পারে। দেখুন llvm.org/docs/LinkTimeOptimization.html
Timmmm

13

না কঠোরভাবে প্রতীক সম্পর্কে, যদি আকার জন্য যাচ্ছে যদিও - সর্বদা কম্পাইল -Osএবং -sপতাকা। -Osনূন্যতম নির্বাহযোগ্য আকারের জন্য ফলাফলের কোডটি অনুকূলিত করে -sএবং সম্পাদনযোগ্য থেকে প্রতীক টেবিল এবং স্থানান্তরের তথ্য সরিয়ে দেয়।

কখনও কখনও - যদি ছোট আকারের পছন্দ হয় - বিভিন্ন অপ্টিমাইজেশান পতাকাগুলি নিয়ে চারপাশে খেলার তাত্পর্য থাকতে পারে - বা নাও পারে -। উদাহরণস্বরূপ টগলিং -ffast-mathএবং / অথবা -fomit-frame-pointerসময়ে আপনাকে কয়েক ডজন বাইট এমনকি বাঁচাতে পারে।


আপনি যতক্ষণ ভাষার মান মেনে চলছেন ততক্ষণ বেশিরভাগ অপ্টিমাইজেশানের টুইটগুলি সঠিক কোডটি পেতে -ffast-mathপারে তবে আমি পুরোপুরি মান-সম্মত সি ++ কোডে সর্বনাশ করেছি , তাই আমি কখনই এটির প্রস্তাব দেব না।
Raptor007

11

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

#include <stdio.h>
void deadcode() { printf("This is d dead codez\n"); }
int main(void) { printf("This is main\n"); return 0 ; }

তারপরে আমি ক্রমান্বয়ে আরও আক্রমণাত্মক ডেড-কোড অপসারণ সুইচগুলি ব্যবহার করে কোডটি সংকলন করেছি:

gcc -Os test.c -o test.elf
gcc -Os -fdata-sections -ffunction-sections test.c -o test.elf -Wl,--gc-sections
gcc -Os -fdata-sections -ffunction-sections test.c -o test.elf -Wl,--gc-sections -Wl,--strip-all

এই সংকলন এবং লিঙ্কিং প্যারামিটারগুলি যথাক্রমে 8457, 8164 এবং 6160 বাইট আকারের এক্সিকিউটেবল তৈরি করেছিল, 'স্ট্রিপ-অল' ঘোষণার ফলে আসা সর্বাধিক অবদান। আপনি যদি আপনার প্ল্যাটফর্মে একইরকম হ্রাস উত্পাদন করতে না পারেন, তবে আপনার জিসিসির সংস্করণটি এই কার্যকারিতা সমর্থন করে না। আমি লিনাক্স মিন্ট ২.6.৩৮-৮-জেনেরিক x86_64- তে জিসিসি (4.5.2-8ubuntu4), ld (2.21.0.20110327) ব্যবহার করছি


8

strip --strip-unneededকেবলমাত্র আপনার এক্সিকিউটেবলের প্রতীক টেবিলটিতে কাজ করে। এটি আসলে কোনও এক্সিকিউটেবল কোড সরিয়ে দেয় না।

স্ট্যান্ডার্ড লাইব্রেরিগুলি ফলাফলগুলি পরে তাদের সমস্ত ফাংশনকে পৃথক বস্তু ফাইলগুলিতে বিভক্ত করে ফলাফল অর্জন করে, যা ব্যবহার করে সম্মিলিত হয় ar। যদি আপনি ফলস্বরূপ সংরক্ষণাগারটিকে একটি লাইব্রেরি হিসাবে সংযুক্ত করেন (যেমন -l your_library, এলডি বিকল্প দিন ) তবে ld কেবলমাত্র অবজেক্ট ফাইলগুলি এবং সেইজন্য প্রতীকগুলি অন্তর্ভুক্ত করবে যা আসলে ব্যবহৃত হয়।

আপনি এর কিছু প্রতিক্রিয়াও পেতে পারেন অনুরূপ ব্যবহারের অনুরূপ প্রশ্নের পারেন।


2
স্ট্যাটিক লিঙ্কটি করার সময় লাইব্রেরিতে পৃথক অবজেক্ট ফাইলগুলি কেবল প্রাসঙ্গিক। ভাগ করা লাইব্রেরিগুলির সাথে, পুরো গ্রন্থাগারটি লোড করা হয় তবে অবশ্যই কার্যকর করা যায় না।
জোনাথন লেফলার

4

আমি জানি না এটি সাম্প্রতিক বৈশিষ্ট্য হিসাবে এটি আপনার বর্তমান পরিস্থিতিকে সাহায্য করবে কিনা তবে আপনি বিশ্বব্যাপী প্রতীকগুলির দৃশ্যমানতা নির্দিষ্ট করতে পারবেন। -fvisibility=hidden -fvisibility-inlines-hiddenসংকলনে পাস করা লিঙ্কারটিকে পরবর্তীতে বিনা শঙ্কিত প্রতীকগুলি থেকে মুক্তি পেতে সহায়তা করতে পারে। যদি আপনি একটি নির্বাহযোগ্য (একটি ভাগ করা লাইব্রেরির বিপরীতে) উত্পাদন করে থাকেন তবে আর কিছুই করার নেই।

আরও তথ্য (এবং উদাহরণস্বরূপ গ্রন্থাগারগুলির জন্য একটি সূক্ষ্ম দ্য পন্থা) জিসিসি উইকিতে উপলব্ধ


4

জিসিসি থেকে ৪.২.১ ম্যানুয়াল, বিভাগ -fwhole-program:

ধরে নিন যে বর্তমান সংকলন ইউনিটটি পুরো প্রোগ্রামটি সংকলিত হওয়ার উপস্থাপন করে। সমস্ত পাবলিক ফাংশন এবং ভেরিয়েবলগুলি ব্যতীত mainএবং এট্রিবিউট দ্বারা সংযুক্ত externally_visibleহওয়াগুলি স্থির ফাংশন হয়ে যায় এবং প্রভাবিত হয় আন্তঃক্রিয়াজাতীয় অপ্টিমাইজারের দ্বারা আরও আগ্রাসীভাবে অনুকূলিত হয়। যদিও এই বিকল্পটি staticএকক ফাইল সমন্বিত প্রোগ্রামগুলির জন্য কীওয়ার্ডের যথাযথ ব্যবহারের সমতুল্য , বিকল্পের সাথে --combineএই পতাকাটি বেশিরভাগ ছোট স্কেলের সি প্রোগ্রামগুলি সংকলন করতে ব্যবহার করা যেতে পারে যেহেতু ফাংশন এবং ভেরিয়েবলগুলি সম্পূর্ণ সংহত সংকলনের ইউনিটের জন্য স্থানীয় হয়ে যায়, এর জন্য নয় একক উত্স ফাইল নিজেই।


হ্যাঁ তবে এটি সম্ভবত কোনও ধরণের ইনক্রিমেন্টাল সংকলনের সাথে কাজ করে না এবং সম্ভবত কিছুটা ধীর হতে চলেছে।
টিম্ম্ম্ম

@ টিম্ম্ম্ম: আমার সন্দেহ হয় আপনি ভাবছেন -flto
বেন ভয়েগট

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

-1

আপনি এটি থেকে সমস্ত চিহ্ন সরাতে স্ট্রিপ বাইনারি ব্যবহার করতে পারেন (যেমন। এক্সিকিউটেবল)।

দ্রষ্টব্য: এটি ফাইল নিজেই পরিবর্তন করে এবং অনুলিপি তৈরি করে না।

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