এটা নির্ভর করে. আইএ -32 (ইনটেল 32-বিট) এর জন্য কিছু সংকলিত amd64 এ চলতে পারে যেহেতু ইনটেলের লিনাক্স 32-বিট অ্যাপ্লিকেশন (উপযুক্ত সফ্টওয়্যার ইনস্টলড) সহ পিছনের দিকে সামঞ্জস্য বজায় রাখে। এখানে আপনার code
রেডহ্যাট 7.3 32-বিট সিস্টেমে সংকলিত (সার্কা 2002, জিসিসি সংস্করণ 2.96) এবং তারপরে বাইনারিটি অনুলিপি করে একটি সেন্টস 7.4 64-বিট সিস্টেমে চালিত হয় (সার্কো 2017):
-bash-4.2$ file code
code: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.2.5, not stripped
-bash-4.2$ ./code
-bash: ./code: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
-bash-4.2$ sudo yum -y install glibc.i686
...
-bash-4.2$ ./code ; echo $?
99
প্রাচীন রেডহ্যাট 7.3 থেকে সেন্টোস 7.4 (মূলত রেডহ্যাট এন্টারপ্রাইজ লিনাক্স 7.4) একই "ডিস্ট্রিবিউশন" পরিবারে রয়েছেন, তাই সম্ভবত ২০০২ থেকে কিছু অন্যান্য এলোমেলো লিনাক্স "স্ক্র্যাচ থেকে ইনস্টল" থেকে ইনস্টল করার চেয়ে আরও ভাল বহনযোগ্যতা থাকবে 2018 ।
Amd64 এর জন্য সংকলিত কিছু লিনাক্সের 32-বিট রিলিজগুলিতে চলবে না (পুরানো হার্ডওয়্যার নতুন হার্ডওয়্যার সম্পর্কে জানে না)। প্রাচীন পুরানো জিনিসগুলির উপর পরিচালিত আধুনিক সিস্টেমে সংকলিত নতুন সফ্টওয়্যারগুলির ক্ষেত্রেও এটি সত্য, কারণ গ্রন্থাগারগুলি এবং এমনকি সিস্টেম কলগুলি পিছনের পোর্টেবল নাও হতে পারে, তাই সংকলনের কৌশলগুলির প্রয়োজন হতে পারে, বা একটি পুরানো সংকলক গ্রহণ করতে পারে এবং সম্ভবত এর পরিবর্তে পুরানো সিস্টেমের উপর সংকলন। (প্রাচীন পুরানো জিনিসগুলির ভার্চুয়াল মেশিনগুলি আশেপাশে রাখার এটি একটি ভাল কারণ))
আর্কিটেকচারটি গুরুত্বপূর্ণ; এএমএম 64 (বা আইএ -32) এআরএম বা এমআইপিএস থেকে সম্পূর্ণ আলাদা তাই এর মধ্যে একটির থেকে বাইনারি অন্যটিতে চালিত হওয়ার আশা করা হয় না। main
আইএএ -32-তে আপনার কোডের বিভাগটি সমাবেশ স্তরের মাধ্যমে এর মাধ্যমে সংকলন gcc -S code.c
করে
main:
pushl %ebp
movl %esp,%ebp
movl $99,%eax
popl %ebp
ret
যেটি একটি এমডি 64 সিস্টেমটি লেনদেন করতে পারে (লিনাক্স সিস্টেমে - এমডি 64 এর বিপরীতে ওপেনবিএসডি 32-বিট বাইনারি সমর্থন করে না ; পুরানো খিলানগুলির সাথে পিছনে সামঞ্জস্যতা আক্রমণকারীদের উইগল রুম দেয়, যেমন সিভিই -2014-8866 এবং বন্ধুরা)। এদিকে বিগ-এন্ডিয়ান এমআইপিএস সিস্টেমে main
পরিবর্তে সংকলন করা হয়েছে:
main:
.frame $fp,8,$31
.mask 0x40000000,-4
.fmask 0x00000000,0
.set noreorder
.set nomacro
addiu $sp,$sp,-8
sw $fp,4($sp)
move $fp,$sp
li $2,99
move $sp,$fp
lw $fp,4($sp)
addiu $sp,$sp,8
j $31
nop
কোন ইন্টেল প্রসেসরের কী করবে সে সম্পর্কে কোনও ধারণা থাকবে না এবং একইভাবে এমআইপিএসে ইন্টেল সমাবেশের জন্য।
বিদেশী কোড চালানোর জন্য আপনি সম্ভবত কিউইএমইউ বা অন্য কোনও এমুলেটর ব্যবহার করতে পারেন (সম্ভবত খুব, খুব ধীরে)।
যাহোক! আপনার কোডটি খুব সাধারণ কোড, তাই অন্য যে কোনও কিছুর চেয়ে কম পোর্টিবিলিটি সমস্যা থাকবে; প্রোগ্রামগুলি সাধারণত লাইব্রেরিগুলি ব্যবহার করে যা সময়ের সাথে সাথে পরিবর্তিত হয় (গ্লিবসি, ওপেনসেল, ...); তাদের জন্য বিভিন্ন লাইব্রেরির পুরানো সংস্করণ ইনস্টল করার প্রয়োজন হতে পারে (যেমন রেডহ্যাট সাধারণত প্যাকেজের নামে "কমপ্যাট" কোথাও রাখে)
compat-glibc.x86_64 1:2.12-4.el7.centos
অথবা সম্ভবত গ্লিবসি ব্যবহার করা পুরানো জিনিসগুলির জন্য, বা সি ++ 11 বা অন্যান্য সি ++ রিলিজের কারণে সাম্প্রতিক পরিবর্তনের জন্য অ্যাবিআই পরিবর্তনগুলি (অ্যাপ্লিকেশন বাইনারি ইন্টারফেস) সম্পর্কে উদ্বিগ্ন। লাইব্রেরির সমস্যাগুলি এড়াতে চেষ্টা করার জন্য কেউ স্থিতিশীল (ডিস্কে বাইনারি আকারে ব্যাপকভাবে বৃদ্ধি করা) সংকলন করতে পারে, যদিও কিছু পুরানো বাইনারি এইটি করেছে কিনা তার উপর নির্ভর করে পুরাতন লিনাক্স ডিস্ট্রিবিউশন সর্বাধিক সবকিছুকে গতিশীল (রেডহ্যাট: হ্যাঁ) সংকলন করছে কিনা। অন্যদিকে, অন্যান্য লাইব্রেরিগুলি ব্যবহার করার জন্য বাইনারিগুলি patchelf
ডাইনামিক (ELF, তবে সম্ভবত a.out
ফর্ম্যাট নয় ) এর মতো জিনিসগুলি আবার নতুন করে তৈরি করতে পারে ।
যাহোক! একটি প্রোগ্রাম চালাতে সক্ষম হওয়াই একটি জিনিস এবং আসলে এটির সাথে অন্য কিছু উপকারী হওয়া। পুরানো 32-বিট ইন্টেল বাইনারিগুলিতে সুরক্ষা সমস্যা থাকতে পারে যদি তারা ওপেনএসএসএল এর কোনও সংস্করণের উপর নির্ভর করে যা এতে কিছু ভয়াবহ এবং নন-ব্যাকপোর্টেড সুরক্ষা সমস্যা রয়েছে বা প্রোগ্রামটি আধুনিক ওয়েব সার্ভারগুলির সাথে মোটেই আলোচনায় সক্ষম না হতে পারে (আধুনিক হিসাবে সার্ভারগুলি পুরানো প্রোগ্রামের পুরানো প্রোটোকল এবং সিফারগুলি প্রত্যাখ্যান করে), বা এসএসএইচ প্রোটোকল সংস্করণ 1 আর সমর্থিত নয়, বা ...