.Out ফাইলগুলি কার্যকর করা যায় না, অনুমতি প্রত্যাখ্যান করা হয়


11

আমি একটি সি ++ প্রোগ্রাম লিখেছি এবং এটি আউটআউট ফাইল তৈরির জন্য মেনে চলেছি। যাইহোক, আমি যখনই এটি চালানোর চেষ্টা করি তখনই আমি অনুমতি অস্বীকার করি। আমি পড়েছি যে আমরা সুডো ব্যবহার করতে পারি, তবে আমি এটি বেশ কার্যকর করতে পারি না। আমি sudo "./a.out" এর মতো কিছু ব্যবহার করি তবে এটিও কার্যকর হয় না।

সম্পাদনা করুন :

"./A.out" চেষ্টা করার পরে আমি প্রাপ্ত বার্তাটি এখানে।

bash: ./a.out: Permission denied

Ls -l a.out এর আউটপুট কত ? A.out ফাইলের আউটপুট কী ? একটি ইউএসবি মেমরি স্টিক / হার্ডডিস্কে এক্সিকিউটেবল কি?
জেআরটি

হার্ডডিস্কে এটি সংকলন প্রক্রিয়া করার পরে এটির একই ফাইলটি তৈরি হয়েছিল। আমি অন্য কোনও পরামিতি সেট করিনি।
শামীম হাফিজ

-আরউ ------- 1 শামীমহাফিজ শামীমহফিজ 7721 2011-05-22 23:30 a.out ls -l a.out এর আউটপুট কি
শামীম হাফিজ

সুতরাং ls -l a.out আউটপুট উপর ভিত্তি করে এটি একটি অনুমতি সমস্যা। আপনি যদি chmod + x a.out করেন তবে চেষ্টা করুন ./a.out এটি কার্যকর হয়? উমাস্কের আউটপুট কী ?
জেআরটি

@ জেআরটি: এটি কার্যকর করে না। "Chmod + x a.out" করা কোনও বার্তা দেয় না, তবে দেখে মনে হচ্ছে এটির কোনও প্রভাব নেই। "Ls -l a.out" আবার চেষ্টা করা একই জিনিসটি এখনও দেখায়।
শামীম হাফিজ

উত্তর:


19

সাধারণত, g++তৈরি ফাইলকে অনুমতি কার্যকর করার অনুমতি দেয়। আপনি যদি -oবিকল্পটি পাস না করেন তবে ফাইলটির নাম দেওয়া হবে a.out

দুটি সমাধানের কারণে আপনার ফাইলটিতে এক্সিকিউট বিট সেট না থাকার সম্ভাব্য দুটি কারণ:

  1. Umask মান 0133 মত একটি মান সেট করা থাকে, যার ফলে সেট হওয়া থেকে চালানো বিট প্রতিরোধ। সমাধান: স্পষ্টভাবে অনুমতিগুলি সেট করুন:

    chmod 755 a.out
    
  2. আপনি যে ফাইল সিস্টেমে কাজ করছেন তা লিনাক্স অনুমতিগুলিকে সমর্থন করে না। আপনি যদি একটি FAT32- ফর্ম্যাটযুক্ত ফ্ল্যাশ ড্রাইভে ফাইল লাগিয়ে রাখেন তবে এটি হতে পারে। সমাধান: ফাইল ব্যাক পারেন আপ এবং ext2, তা ফরম্যাট বা ড্রাইভ মাউন্ট fmask=0022বা umask=0022(বাদ fmask)। আরও তথ্যের জন্য মাউন্টের ম্যানুয়াল পৃষ্ঠায় ফ্যাট বিভাগের জন্য মাউন্ট বিকল্পগুলি দেখুন ।

বাশ স্ক্রিপ্টগুলির জন্য যার এক্সিকিউট বিট সেট নেই, আপনি চালাতে পারেন bash file.sh। এক্সিকিউটেবল কন্টেন্টযুক্ত সমস্ত ফাইলের জন্য এই জাতীয় বৈশিষ্ট্য উপস্থিত রয়েছে (শেবাং লাইন #!/path/to/interpreterসেট সংকলিত ফাইল এবং ফাইলগুলি )। এক্সিকিউট বিট সেট ছাড়াই ফাইলগুলি সম্পাদন করতে, এই জাতীয় প্রোগ্রাম চালানোর জন্য বিশেষ ফাইল /lib/ld-linux.so.2(বা /lib/ld-linux-x86-64.so.264৪-বিট অ্যাপ্লিকেশনগুলির জন্য) ব্যবহার করুন:

/lib/ld-linux-x86-64.so.2 a.out

এই উত্তরটি আরও আকর্ষণীয়, কেবল যোগ করার জন্য, আমি যেভাবে উবুন্টু ইনস্টল করেছি উইন্ডোজ থেকে এবং একটি ফোল্ডার সি সি ড্রাইভে তৈরি করা হয়েছিল (উইন্ডোজ ইনস্টলেশন ড্রাইভ)। এই ড্রাইভটি FAT32 হিসাবে ফর্ম্যাট করা হয়েছে। এটির সাথে কিছু করতে পারে?
শামীম হাফিজ

1
আপনি একটি Wubi ইনস্টলেশন সম্পন্ন করেছেন ( C:\Ubuntuতৈরি করা হয়েছিল)। আপনি "সি:" এ ফাইলগুলি না লাগিয়ে আপনার উবুন্টু ইনস্টলেশনটি না লাগলে সমস্যা হবে না। আপনি যদি উইন্ডোজ ব্যবহার না করে থাকেন বা প্রচুর ডিস্কের জায়গা থাকে তবে আমি উত্সাহিত একটি পার্টিশনে উবুন্টু ইনস্টল করার পরামর্শ দিচ্ছি। এবং আবার এনটিএফএস / FAT32 লিনাক্স অনুমতি সমর্থন করে না, তাই আপনি চালাতে পারেন sudo chown user file, chmod 755 fileএটা কাজ করবে না। এর জন্য আপনার অবশ্যই একটি এক্সটি ফাইল সিস্টেমের দরকার।
লেকেনস্টেইন

3
একই গল্প, উইন্ডোজ ফাইল সিস্টেমগুলির মধ্যে কোনও লিনাক্স ফাইল অনুমতি সমর্থন করে না। আপনার ফাইলগুলি একটি ফাইল-সিস্টেম ফর্ম্যাট করা EXT এ রাখা উচিত।
লেকেনস্টেইন

1
সুতরাং কেবল উবুন্টু সম্পর্কিত একটি ফোল্ডারে কাজ করা ঠিক এই কৌশলটি করা উচিত? মানে, উবুন্টাস ফাইল সিস্টেম কাঠামোর অংশ নয় এমন ফোল্ডারগুলি আমার ব্যবহার করা উচিত নয়?
শামীম হাফিজ

3
হুবহু, শুধু থাকুন ~, আমি ~/projectsআমার সমস্ত প্রকল্প এটি তৈরি করি এবং এতে রাখি, আপনি একই জিনিসটি করতে পারেন।
লেকেনস্টেইন

5

.out একটি অস্বাভাবিক এক্সটেনশন। সাধারণত এটি সাধারণত "ট্রেস আউটপুট" ফাইলটিকে বোঝায়।

আপনার সংশ্লেষটি পরীক্ষা করুন যা আপনি সংকলন করতে ব্যবহার করছেন

যেমন

gcc myfile.c /usr/lib/libsomelibrary.a -o outputfilename

অথবা হতে পারে

g++ myfile.cpp -lm -o outputfilename

এক্সিকিউটেবল বিটটি ফাইলে সেট করা আছে কিনা তা পরীক্ষা করে দেখতে হবে

ls -l a.out

অথবা আপনি কেবল কার্যকর করতে পারেন বিট

chmod +x a.out

তারপরে আপনি আপনার ফাইল চালাতে পারেন

./a.out

বা সহজভাবে

a.out

আপনার সম্ভবত এটিও পরীক্ষা করা উচিত যে আউটপুট ফাইলটি বাইনারি হিসাবে সঠিকভাবে লেখা হয়েছে

অর্থাত

file a.out

এটি ফাইলটির ফর্ম্যাটটি কী তা রিপোর্ট করবে - কোনও স্ক্রিপ্ট বা বাইনারি

কারা কার্যকর করতে সক্ষম হবে তা সীমাবদ্ধ না রেখে আপনি খুব কমই রুট হিসাবে কার্যকর করতে হবে।

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

অর্থাত

sudo chown fred:fred a.out

অর্থাত্ আপনার ব্যবহারকারীর আইডি দিয়ে "ফ্রেড" প্রতিস্থাপন করুন।


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

আপডেট হয়েছে - আপনার প্রশ্নের স্পষ্টতা এবং উত্তর দেওয়ার আশা করছি।
ফসফ্রিডম

a.out হ'ল সংকলকের একটি লিগ্যাসি বৈশিষ্ট্য তাই এটি যদি আপনার কাছে না চাইতে থাকে তবে এটি অনুমানযোগ্য ফাইল নাম তৈরি করে। এটি কোনও অনুমতি সংক্রান্ত সমস্যা নয়, তবে সংকলক এবং সি ++ কীভাবে কাজ করে তার একটি ভুল ধারণা।
স্প্যাম্যাপস

লিনাক্স / ইউনিক্স ফাইল-প্রকার নির্ধারণ করতে ফাইল এক্সটেনশনের উপর নির্ভর করে না। সাধারণত সম্পাদনযোগ্য ফাইলগুলির কোনও এক্সটেনশন থাকে না। এছাড়াও, কোনও ফাইল কার্যকর করার জন্য ফর্ম্যাটটি সাধারণত শেলের মধ্যে আলাদা হয় না। সমস্ত শেলগুলি ./a.out দিয়ে সন্ধান করা উচিত যদি না এটি কিছু বিদেশী শেল না থাকে।
জেআরটি

1
গুনার - দয়া করে আপনার কম্পাইল কমান্ড দিয়ে টার্মিনালে সম্পূর্ণ আউটপুট অনুলিপি করুন এবং তারপরে ls -l, chmod + x এবং শেষ পর্যন্ত সম্পাদন করুন। দয়া করে "
হোয়ামি

4

কেবলমাত্র আপনার বাড়ির ফোল্ডারে ফোল্ডারটি অনুলিপি করুন এবং এটি কার্যকর হবে। আপনি সম্ভবত এটি বাহ্যিক ড্রাইভ বা অন্য কোনও কিছুতে চালানোর চেষ্টা করছেন।


0

প্রথম উত্তরে এফএটি-ফাইল সিস্টেমগুলির জন্য কর্মসংস্থান

"আপনি যদি FAT32- ফর্ম্যাটযুক্ত ফ্ল্যাশ ড্রাইভে ফাইলগুলি রাখেন তবে এটি হতে পারে S সমাধান: (...) ড্রাইভটিকে fmask = 0022 বা umask = 0022 (fmask বাদ দেওয়া) দিয়ে মাউন্ট করুন" "

সাধারণত কাজ করে না - উমাস্কের জন্য ডিফল্টটি বেশিরভাগ ক্ষেত্রে 0022 হয়, সুতরাং এটি কোনও পরিবর্তন করে না।

অন্য একটি মাউন্ট প্যারামিটারের ডিফল্ট, তবে কার্যকরভাবে বাইনারিগুলি কার্যকর করতে নিষেধ করে, বিশেষত যদি FAT- ফাইল-সিস্টেমটি মূল-নন-ব্যবহারকারী হিসাবে মাউন্ট করা থাকে: noexec

সুতরাং এই জাতীয় বিকল্প হিসাবে কেবল FAT- ফর্ম্যাটযুক্ত ড্রাইভগুলি মাউন্ট করুন exec:

sudo mount -o exec /dev/sd.. /mountpoint

(এটি সাধারণত মূল হিসাবে সম্পন্ন করতে হবে, সুতরাং "সুডো") এবং আপনি সেখান থেকে সরাসরি বাইনারিগুলি কার্যকর করতে সক্ষম হবেন।


-2

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

আপনি এই ফাইলটি তৈরি করতে কোন কমান্ড লাইনটি ব্যবহার করেছেন তা জানতে আগ্রহী হব, কারণ জিএনইউ জিসিসির সি ++ সংকলক, জি ++, আমাকে একটি সহজ প্রোগ্রাম ডাব্লু / ওএ মূল ফাংশন তৈরি করতে দেয় না:

#include <iostream>

using namespace std;

void no_main()
{
  cout << "Hello World" << endl;
}

$ g++ hello.cc
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 0 has invalid symbol index 11
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 1 has invalid symbol index 12
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 2 has invalid symbol index 2
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 3 has invalid symbol index 2
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 4 has invalid symbol index 11
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 5 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 6 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 7 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 8 has invalid symbol index 2
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 9 has invalid symbol index 2
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 10 has invalid symbol index 12
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 11 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 12 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 13 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 14 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 15 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 16 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 17 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 18 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 19 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 20 has invalid symbol index 21
/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/../../../crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: ld returned 1 exit status

তবে আমি যদি 'অকার্যকর No_main' পরিবর্তন করে 'ইন্ট মেইন' তে এটি কাজ করে:

$ g++ hello.cc
$ ./a.out
Hello World

5
যদি তার কোনও প্রধান কাজ না থাকে তবে এটি লিঙ্ক করবে না এবং তাই এটি a.out ফাইল তৈরি করবে না ।
জেআরটি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.