سؤال

أقوم بتطوير برنامج على OSX 10.6.4 (Snow Leopard)، وأريد أن أكون قادرًا على تشغيل المنتج المترجم على أجهزة Intel Mac الأخرى، والتي قد لا يكون XCode لدى بعضها مثبتًا.

لتبسيط الأمور، قمت أولاً بكتابة برنامج Hello World.

#include<stdio.h>
int main() {
    printf("Hello world!\n");
    return 0;
}

إذا قمت بتجميعها كما

gcc -static prog.c

أحصل على الخطأ التالي:

ld: library not found for -lcrt0.o

لا أعرف أين أجد هذه المكتبة.الآن، ذكر بعض الأشخاص أنه لا ينبغي لي أن أقوم بالتجميع بشكل ثابت على أجهزة Mac منذ ذلك الحين نظام يجب أن تكون المكتبات المشتركة متاحة في كل مكان (يمكن ربط مكتبات الطرف الثالث يدويًا).ومع ذلك، عندما أحاول تشغيل برنامج Hello World على جهاز Mac آخر، يظهر لي الخطأ التالي:

 dyld: unknown required load command 0x80000022
 Trace/BPT trap

إذًا، كيف يمكنك تجميع برنامج على نظام Mac بحيث يمكن توزيعه؟لا أواجه مشكلات في الهندسة المعمارية، حيث إن معظم أجهزة الكمبيوتر التي أهتم بها هي أجهزة Intel Mac.

هل كانت مفيدة؟

المحلول

لا تستخدم -static. سوف يعمل التنفيذ الخاص بك بشكل جيد على Macs 10.6.x x86. إذا كنت ترغب في النشر على Macs قبل 10.6 ، فستحتاج إلى استخدام SDK المناسب ولكن بصرف النظر عن ذلك يجب أن "يعمل فقط" ، بغض النظر عما إذا كانت أدوات المطور مثبتة.

نصائح أخرى

قد يكون من المفيد استخدام XCode لإنشاء ملفك القابل للتنفيذ، باستخدام قالب برنامج سطر الأوامر (الملفات التنفيذية الأساسية لنظام Unix)، وذلك ببساطة لأنه سيدير ​​الكثير من خيارات المترجم لك (بما في ذلك مجموعة أدوات تطوير البرامج (SDK) التي تقوم بتجميعها/الإصدارات التي تستهدفها ).

أعتقد أن تجميع سطر الأوامر الافتراضي سيتم تجميعه مقابل مكتبات النظام الحالية (10.6.4).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top