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

کمک و پشتیبانی => برنامه‌سازی => نویسنده: آرمان در 05 تیر 1392، 10:23 ق‌ظ

عنوان: چی باعث می شه یک فایل باینری روی سیستم های مختلف اجرا نشه؟؟
ارسال شده توسط: آرمان در 05 تیر 1392، 10:23 ق‌ظ
سلام

چند وقت یک سوال خیلی ذهنم رو مشغول کرده:
می خوام بدونم چی باعث می شه اگر ما برنامه ای رو با زبانی مثل C بنویسیم و بعد اون رو مثلا رو لینوکس کامپایل کنیم رو همون معماری CPU روی ویندوز یا مک دیگه اجرا نشه؟
عنوان: پاسخ : چی باعث می شه یک فایل باینری روی سیستم های مختلف اجرا نشه؟؟
ارسال شده توسط: AmirrezaGhaderi در 05 تیر 1392، 01:30 ب‌ظ
اگه معماری پردازنده یکی باشه، مسلما دستورات زبان به صورت یه شکل به زبان ماشین تبدیل میشن. مثلا دستور
if روی هر سه تا سیستم عامل خروجی کد ماشینش برابر هست. اما مساله اینه که فایل های اجرایی هم «فرمت» دارن و
هر سیستم عاملی فرمت مخصوص به خودش رو میخونه فقط. کامپایلر برای هر سیستم عامل کلی کد دیگه به
فایل باینری نهایی اضافه میکنه تا قابل درک باشه برای اون سیستم عامل، و این کدهای اضافی هم برای هر کدوم از
این سیستم عامل ها متفاوت هست. برای همینه که ممکنه یه برنامه‌ی واحد روی همون پردازنده، توی لینوکس یا ویندوز
اجرا نشه...
عنوان: پاسخ : چی باعث می شه یک فایل باینری روی سیستم های مختلف اجرا نشه؟؟
ارسال شده توسط: محمد اعتماددار در 05 تیر 1392، 03:30 ب‌ظ
لایک به سوالت.
من خودم هم نمی‌دونم.
در صفحه 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:34 ب‌ظ
اگه معماری پردازنده یکی باشه، مسلما دستورات زبان به صورت یه شکل به زبان ماشین تبدیل میشن. مثلا دستور
if روی هر سه تا سیستم عامل خروجی کد ماشینش برابر هست. اما مساله اینه که فایل های اجرایی هم «فرمت» دارن و
هر سیستم عاملی فرمت مخصوص به خودش رو میخونه فقط. کامپایلر برای هر سیستم عامل کلی کد دیگه به
فایل باینری نهایی اضافه میکنه تا قابل درک باشه برای اون سیستم عامل، و این کدهای اضافی هم برای هر کدوم از
این سیستم عامل ها متفاوت هست. برای همینه که ممکنه یه برنامه‌ی واحد روی همون پردازنده، توی لینوکس یا ویندوز
اجرا نشه...

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

اگه مثلا برای لینوکس آرچ کامپایل بشه می شه رو یه سیستم عامل نزدیک به خودش مثلا Arch BSD اجرا بشه؟
(من اطلاعاتم خیلی در باره BSD محدوده اگه تفاوتشون خیلی زیاده عذر می خوام.)
عنوان: پاسخ : چی باعث می شه یک فایل باینری روی سیستم های مختلف اجرا نشه؟؟
ارسال شده توسط: محمدرضا ح. در 05 تیر 1392، 04:55 ب‌ظ
اگه معماری پردازنده یکی باشه، مسلما دستورات زبان به صورت یه شکل به زبان ماشین تبدیل میشن. مثلا دستور
if روی هر سه تا سیستم عامل خروجی کد ماشینش برابر هست. اما مساله اینه که فایل های اجرایی هم «فرمت» دارن و
هر سیستم عاملی فرمت مخصوص به خودش رو میخونه فقط. کامپایلر برای هر سیستم عامل کلی کد دیگه به
فایل باینری نهایی اضافه میکنه تا قابل درک باشه برای اون سیستم عامل، و این کدهای اضافی هم برای هر کدوم از
این سیستم عامل ها متفاوت هست. برای همینه که ممکنه یه برنامه‌ی واحد روی همون پردازنده، توی لینوکس یا ویندوز
اجرا نشه...

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

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

ArchBSD همون FreeBSD هست که بجای Ports از pacman استفاده میکنه :). پس اصلا نزدیک به هم نیستند.