انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: چی باعث می شه یک فایل باینری روی سیستم های مختلف اجرا نشه؟؟  (دفعات بازدید: 1416 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین آرمان

  • Jr. Member
  • *
  • ارسال: 60
  • جنسیت : پسر
سلام

چند وقت یک سوال خیلی ذهنم رو مشغول کرده:
می خوام بدونم چی باعث می شه اگر ما برنامه ای رو با زبانی مثل C بنویسیم و بعد اون رو مثلا رو لینوکس کامپایل کنیم رو همون معماری CPU روی ویندوز یا مک دیگه اجرا نشه؟

آفلاین AmirrezaGhaderi

  • Jr. Member
  • *
  • ارسال: 90
  • جنسیت : پسر
    • حساب تویتر من
اگه معماری پردازنده یکی باشه، مسلما دستورات زبان به صورت یه شکل به زبان ماشین تبدیل میشن. مثلا دستور
if روی هر سه تا سیستم عامل خروجی کد ماشینش برابر هست. اما مساله اینه که فایل های اجرایی هم «فرمت» دارن و
هر سیستم عاملی فرمت مخصوص به خودش رو میخونه فقط. کامپایلر برای هر سیستم عامل کلی کد دیگه به
فایل باینری نهایی اضافه میکنه تا قابل درک باشه برای اون سیستم عامل، و این کدهای اضافی هم برای هر کدوم از
این سیستم عامل ها متفاوت هست. برای همینه که ممکنه یه برنامه‌ی واحد روی همون پردازنده، توی لینوکس یا ویندوز
اجرا نشه...

آفلاین محمد اعتماددار

  • Jr. Member
  • *
  • ارسال: 96
  • جنسیت : پسر
لایک به سوالت.
من خودم هم نمی‌دونم.
در صفحه Executable در ویکی‌پدیای انگلیسی این رو نوشته:

Since each operating system family features its own system call architecture, executable files are generally tied to specific operating systems, or families of operating systems.


توی سایت stackoverflow هم همین موضوعی که شما فرمودید بحث شده. جواب‌های اون‌ها هم جالبه:
http://stackoverflow.com/q/5477483/1951027
« آخرین ویرایش: 05 تیر 1392، 03:40 ب‌ظ توسط محمد اعتماددار »
--~~~~

آفلاین آرمان

  • Jr. Member
  • *
  • ارسال: 60
  • جنسیت : پسر
اگه معماری پردازنده یکی باشه، مسلما دستورات زبان به صورت یه شکل به زبان ماشین تبدیل میشن. مثلا دستور
if روی هر سه تا سیستم عامل خروجی کد ماشینش برابر هست. اما مساله اینه که فایل های اجرایی هم «فرمت» دارن و
هر سیستم عاملی فرمت مخصوص به خودش رو میخونه فقط. کامپایلر برای هر سیستم عامل کلی کد دیگه به
فایل باینری نهایی اضافه میکنه تا قابل درک باشه برای اون سیستم عامل، و این کدهای اضافی هم برای هر کدوم از
این سیستم عامل ها متفاوت هست. برای همینه که ممکنه یه برنامه‌ی واحد روی همون پردازنده، توی لینوکس یا ویندوز
اجرا نشه...

یعنی اگه برای تمام سیستم عامل ها کدش رو قرار بدیم رو همه اجرا می شه؟

اگه مثلا برای لینوکس آرچ کامپایل بشه می شه رو یه سیستم عامل نزدیک به خودش مثلا Arch BSD اجرا بشه؟
(من اطلاعاتم خیلی در باره BSD محدوده اگه تفاوتشون خیلی زیاده عذر می خوام.)

آفلاین محمدرضا ح.

  • High Hero Member
  • *
  • ارسال: 3117
  • جنسیت : پسر
  • Your Future is our Past!
اگه معماری پردازنده یکی باشه، مسلما دستورات زبان به صورت یه شکل به زبان ماشین تبدیل میشن. مثلا دستور
if روی هر سه تا سیستم عامل خروجی کد ماشینش برابر هست. اما مساله اینه که فایل های اجرایی هم «فرمت» دارن و
هر سیستم عاملی فرمت مخصوص به خودش رو میخونه فقط. کامپایلر برای هر سیستم عامل کلی کد دیگه به
فایل باینری نهایی اضافه میکنه تا قابل درک باشه برای اون سیستم عامل، و این کدهای اضافی هم برای هر کدوم از
این سیستم عامل ها متفاوت هست. برای همینه که ممکنه یه برنامه‌ی واحد روی همون پردازنده، توی لینوکس یا ویندوز
اجرا نشه...

یعنی اگه برای تمام سیستم عامل ها کدش رو قرار بدیم رو همه اجرا می شه؟

اگه مثلا برای لینوکس آرچ کامپایل بشه می شه رو یه سیستم عامل نزدیک به خودش مثلا Arch BSD اجرا بشه؟
(من اطلاعاتم خیلی در باره BSD محدوده اگه تفاوتشون خیلی زیاده عذر می خوام.)

ArchBSD همون FreeBSD هست که بجای Ports از pacman استفاده میکنه :). پس اصلا نزدیک به هم نیستند.
قاضی : تو السالوادور چه کار میکردی؟
چه‌گوارا : آفتاب میگرفتم
قاضی : پس چرا ساختمان دادگستری رو منفجر کردی؟
چه‌گوارا : جلوی آفتاب رو گرفته بود