সংকলন সমস্যা: crt1.o খুঁজে পাচ্ছেন না


114

আমার একটি ভার্চুয়াল দেবিয়ান সিস্টেম রয়েছে যা আমি বিকাশের জন্য ব্যবহার করি।

আজ আমি llvm / ঝনঝন চেষ্টা করতে চেয়েছিলাম।

ক্ল্যাং ইনস্টল করার পরে আমি আমার পুরানো সি-প্রকল্পগুলি (জিসিসি সহ) সংকলন করতে পারি না। এটি ত্রুটি:

...
/usr/bin/ld: cannot find crt1.o: No such file or directory
/usr/bin/ld: cannot find crti.o: No such file or directory
collect2: ld returned 1 exit status
...

আমি ঝনঝন আনইনস্টল করেছিলাম এবং এটি এখনও কার্যকর হয়নি।

আমি কীভাবে এটি ঠিক করতে পারি তার কারও কি ধারণা আছে?


6
ইনস্টল করার চেষ্টা করুন libc0.1-dev
মিছাস

1
ম্যাক জন্য, দেখুন: stackoverflow.com/questions/1365211/...
kenorb


এটি লঞ্চপ্যাডে রিপোর্ট করা একটি বিইউজি
রোমান

উত্তর:


91

দেবিয়ান / উবুন্টু

সমস্যাটি সম্ভবত আপনার বর্তমান আর্কিটেকচারের জন্য কেবল জিসিসি এবং এটি 64 বিট। আপনার 32 বিট সাপোর্ট ফাইলগুলি দরকার। তার জন্য, আপনার সেগুলি ইনস্টল করা দরকার

sudo apt install gcc-multilib

2
উবুন্টুতে এটি কাজ করেছে sudo apt-get install gcc-multilibএবং এটি আমার ত্রুটিটি স্থির করেছেgfortran -m32 ...
রেন্ডওয়া 1 কে

1
আরো নির্দিষ্ট প্রশ্ন যে 64 বনাম 32 কারণ উল্লেখ: stackoverflow.com/questions/21724540/...
সিরো Santilli郝海东冠状病六四事件法轮功

62

প্রতীকী লিঙ্ক তৈরি করতে আমাকে কী সাহায্য করেছে:

sudo ln -s /usr/lib/x86_64-linux-gnu /usr/lib64

5
এটি কাজ করে, তবে এটি আপনাকে কার্যকরভাবে দেবিয়ান মাল্টিার্কের একটি খিলান দেয়।
জেরেমিয়া

2
ক্রস সংকলন সরঞ্জামচয়ন সেটআপ করার চেষ্টা করার সময় আমার একই সমস্যা হয়েছিল যে কেউ আমাকে টার বান্ডিল হিসাবে দিয়েছে। জিসিসি কোথায় crt1.o সন্ধান করছে তা দেখতে আমাকে স্ট্রেস (যেমন "স্ট্রেস জিসিসি <আমার সমস্ত যুক্তি> 2> & 1 | গ্রেপ crt1.o") ব্যবহার করতে হয়েছিল, তাই আমি কোন প্রতীকী লিঙ্কটি তৈরি করব তা বুঝতে পারি।
অ্যান্ড্রু বেনব্রিজ

37

দেখে মনে হচ্ছে আপনি এলএলএম / ঝাঁকুনির সাথে খেলতে গিয়ে আপনি (বা প্যাকেজ ম্যানেজার) আগের বিদ্যমান স্ট্যান্ডার্ড সি লাইব্রেরি ডেভেলপমেন্ট প্যাকেজটি সরিয়ে ফেলেছেন ( উদাহরণস্বরূপ দেবিয়ানে লিখিত ) আপনি সম্ভবত এটি ইনস্টল না করে রেখেছেন , সুতরাং আপনাকে পুনরায় ইনস্টল করতে হবে এটি, এখন আপনি আবার জিসিসিতে ফিরে গিয়েছেন।

আপনি দেবিয়ান এ এটি করতে পারেন:

aptitude show libc-dev

উবুন্টু:

apt-get install libc-dev

উবুন্টুতে, যদি আপনার কাছে libc-dev না থাকে, যেহেতু আমি এটি প্যাকেজ.বুন্টু.কম এ খুঁজে পাচ্ছি না, আপনি সরাসরি libc6-dev ইনস্টল করার চেষ্টা করতে পারেন।

বা রেডহেটের মতো সিস্টেমে:

yum ইনস্টল glibc-devel

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


1
প্রায়শই এই ত্রুটির সাথে ডেবিয়ানের মাল্টিআরচ স্টাফগুলি অনেকগুলি বিল্ড ভেঙে দেয় না। এক্সপোর্ট LD_LIBRARY_PATH কৌশলটি করতে পারে।
ডেডালনিক্স

3
এটি আলপাইন লিনাক্সের জন্য সহায়তা করেapk add libc-dev=0.7.1-r0
ইউ জিয়াও

27

এই হল বাগ launchpad রিপোর্ট, কিন্তু একটি ওয়ার্কঅ্যারাউন্ড হল:

এই ফাইলগুলি কোথায় রয়েছে তা দেখতে এটি চালান

$ find /usr/ -name crti*
/usr/lib/x86_64-linux-gnu/crti.o

তারপরে এই পথটি LIBRARY_PATH ভেরিয়েবলটিতে যুক্ত করুন

$ export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH

14.04 এ কাজ করে। আপনি যদি আপনার সিস্টেমের লাইব্রেরিগুলিকে
ম্যাঙ্গেল

17

আপনি যদি 'হুইজি' নামক ডিবিয়ান টেস্টিং সংস্করণটি ব্যবহার করেন তবে আপনাকে মাল্টিআার্কে স্থানান্তরিত দ্বারা দংশিত হতে পারে। দেবিয়ান এর মাল্টিআরচ সম্পর্কে এখানে আরও: http://wiki.debian.org/ মাল্টিয়ার্ক

মূলত, যা ঘটছে তা হ'ল বিভিন্ন আর্কিটেকচার নির্দিষ্ট গ্রন্থাগারগুলি ফাইল সিস্টেমের traditionalতিহ্যবাহী স্থান থেকে নতুন আর্কিটেকচার নির্দিষ্ট জায়গায় স্থানান্তরিত হচ্ছে। এই কারণে /usr/bin/ldবিভ্রান্ত হয়।

আপনি উভয় /usr/lib64/এবং /usr/lib/i386-linux-gnu/এখনই crt1.o খুঁজে পাবেন এবং আপনাকে সে সম্পর্কে আপনার সরঞ্জামচেনা বলতে হবে। এটি কীভাবে করা যায় সে সম্পর্কে এখানে কিছু ডকুমেন্টেশন রয়েছে; http://wiki.debian.org/Multiarch/LibraryPathOverview

মনে রাখবেন যে কেবলমাত্র একটি সিমিলিংক তৈরি করা আপনাকে কেবল একটি আর্কিটেকচার দেবে এবং আপনি মূলত মাল্টিআরচ অক্ষম করবেন। যদিও আপনি যা চান এটি হতে পারে এটি সর্বোত্তম সমাধান নাও হতে পারে।


3
"আপনার সরঞ্জামচঞ্চটিকে সে সম্পর্কে কীভাবে বলবেন" সে সম্পর্কে আরও কিছুটা চমত্কার হবে, কারণ এটি ঠিক আমার এই পরিস্থিতিতে।
সুলএক্স

প্রথমত, আপনি কোন আর্কিটেকচার তৈরি করছেন তা জানতে হবে। আপনি কি একটি এএমডি 64 ভিত্তিক অ্যাপ্লিকেশন তৈরি করছেন? যদি তা হয় তবে আপনাকে 'এলডি' বলতে হবে যেখানে এএমডি 64 ভিত্তিক শেয়ার্ড অবজেক্ট ফাইলগুলি রয়েছে, অর্থাত্ আপনার প্রয়োজনীয় ফাইল ফাইল। আপনি একটি যে AMD64 কাজ করছি যদি তারা, / usr / lib64 থাকা উচিত
Jeremiah

16

জেরেমিয়া পোস্ট করা http://wiki.debian.org/ মাল্টিয়ার্ক / লাইবারিপথ ওভারভিউটি পড়ার পরে , আমি সিসিলেঙ্ক ছাড়াই কাজ করে এমন জিসিসি পতাকাটি পেয়েছি:

gcc -B/usr/lib/x86_64-linux-gnu hello.c

সুতরাং, আপনি -B/usr/lib/x86_64-linux-gnuআপনার মেকফিলের মধ্যে কেবল সিএফএলএজিএস ভেরিয়েবল যুক্ত করতে পারেন ।


@ ডিজেড্যাকের আপনার উবুন্টু ১.0.০৪, এএএএফসিটিতে কোনও পতাকা লাগবে না।
অ্যালেক্সম

9

জিসিসি 4.8 32-বিট প্রোগ্রামগুলি সংকলন করতে RHEL 7 64-বিট পেতে, আপনাকে দুটি জিনিস করতে হবে।

  1. সমস্ত 32-বিট জিসিসি 4.8 বিকাশ সরঞ্জাম সম্পূর্ণরূপে ইনস্টল করা আছে তা নিশ্চিত করুন:

    sudo yum install glibc-devel.i686 libgcc.i686 libstdc++-devel.i686 ncurses-devel.i686
  2. -M32 পতাকা ব্যবহার করে প্রোগ্রামগুলি সংকলন করুন

    gcc pgm.c -m32 -o pgm

এখান থেকে চুরি হয়েছে: কীভাবে 64৪-বিট আরএইচইএলে 32-বিট অ্যাপ্লিকেশন সংকলন করবেন? - আমাকে কেবল প্রথম পদক্ষেপটি করতে হয়েছিল।


6

Crti.o ফাইল অনুপস্থিত হিসাবে ব্যাখ্যা করা হয়েছে , সমস্ত অনুসন্ধানের পথটি খুঁজে পেতে "জিসিসি-প্রিন্ট-অনুসন্ধান-ডায়ারস" ব্যবহার করা ভাল। তারপরে crt1.o এর অবস্থান নির্দেশ করতে "sudo ln -s" উপরে বর্ণিত হিসাবে একটি লিঙ্ক তৈরি করুন




1

এটি সেন্টোতে 5.4 এ চলেছে। লক্ষ্য করা গেছে যে lib64 এ crt * .o ফাইল রয়েছে তবে lib থাকে নি। ইয়েমের মাধ্যমে গ্লিবিসি-ডেভেল ইনস্টল করা হয়েছে যা i386 বিট ইনস্টল করেছে এবং এটি আমার সমস্যার সমাধান করেছে।


0

এমনকি আমি একই সংকলন ত্রুটি পেয়েছি যখন আমি আই 686-সেমি-লিনাক্স-জিসিসি ক্রস করেছিলাম।

নীচের সংকলন বিকল্পটি আমার সমস্যার সমাধান করেছে

$ i686-cm-linux-gcc a.c --sysroot=/opt/toolchain/i686-cm-linux-gcc

দ্রষ্টব্য: সায়রোটকে সংকলক ডিরেক্টরিতে নির্দেশ করা উচিত যেখানে usr / অন্তর্ভুক্ত থাকে

আমার ক্ষেত্রে টুলচেইনটি / opt / toolchain / i686-cm-linux-gcc ডিরেক্টরিতে ইনস্টল করা আছে এবং usr / অন্তর্ভুক্ত এছাড়াও একই ডিরেক্টরিতে উপলব্ধ


0

আমি নিম্নলিখিত হিসাবে এটি সমাধান:

1) ctr1.o এবং ctri.o ফাইল ব্যবহার করে সনাক্ত করার চেষ্টা করুন find -name ctr1.o

আমি আমার কম্পিউটারে নিম্নলিখিত পেয়েছি: $/usr/lib/i386-linux/gnu

2) যে পথ যোগ করুন PATH(এছাড়াও LIBRARY_PATH) এনভায়রনমেন্ট ভেরিয়েবল (ক্রমে নাম দেখার জন্য: টাইপ envটার্মিনাল কমান্ড):

$PATH=/usr/lib/i386-linux/gnu:$PATH
$export PATH

বিভ্রান্তি এড়াতে, লাইন $ PATH = / usr / lib / i386-linux / gnu:
AT

0

আমার আজ একই সমস্যা ছিল, আমি এটি প্রস্তাবিত প্যাকেজগুলি ইনস্টল করে সমাধান করেছি: libc6-dev-mipsel-cross libc6-dev-mipsel-cross, libc-dev-mipsel-cross

এটি কাজ করেছে:

sudo apt-get install libc6-dev-mipsel-cross

-1

আমার ক্ষেত্রে, crti.o ত্রুটিটি মাতলাব থেকে সম্পাদনের পথের কনফিগারেশনের দ্বারা প্রবর্তিত হয়েছিল। উদাহরণস্বরূপ, আপনি যদি আগে নিজের এক্সিকিউশন ডিরেক্টরিটির পথ নির্ধারণ না করে থাকেন তবে আপনি কোনও ফাইল সম্পাদন করতে পারবেন না। এটি করার জন্য: ফাইল> সেটপথ, আপনার ডিরেক্টরি যুক্ত করুন এবং সংরক্ষণ করুন।



-2

আমার ক্ষেত্রে Ubuntu 16.04আমার কিছু নেই crti.o:

$ find /usr/ -name crti*

তাই আমি libc ডেভেলপার ইনস্টল 6 -dev প্যাকেজ:

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