aarch64-linux-gnu-gcj-5 - عبر الإنترنت في السحابة

هذا هو الأمر aarch64-linux-gnu-gcj-5 الذي يمكن تشغيله في مزود الاستضافة المجانية OnWorks باستخدام إحدى محطات العمل المجانية المتعددة عبر الإنترنت مثل Ubuntu Online أو Fedora Online أو Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت

برنامج:

اسم


gcj - مترجم Ahead-of-time للغة Java

موجز


اتفاقية جنيفر [-Iدير...] [-d دير...]
[- كلاسباث=مسار] [--ممر=مسار]
[-fخيار...] [--التشفير=الاسم]
[--الأساسية=اسم_الفئة] [-Dالاسم[=قيمنا] ...]
[-C] [--الموارد اسم المورد] [-d دليل]
[-Wحذر...]
مصدر الملف

الوصف


As gcj هو مجرد واجهة أمامية أخرى لـ دول مجلس التعاون الخليجي، فهو يدعم العديد من نفس الخيارات مثل دول مجلس التعاون الخليجي.
يوثق هذا الدليل فقط الخيارات الخاصة بـ gcj.

OPTIONS


إدخال و الناتج ملفات
A gcj الأمر يشبه أ دول مجلس التعاون الخليجي الأمر ، من حيث أنه يتكون من عدد من الخيارات والملف
الأسماء. يتم دعم الأنواع التالية من أسماء ملفات الإدخال:

ملفجافا
ملفات جافا المصدر.

ملف.صف دراسي
ملفات Java bytecode.

ملفالرمز البريدي
ملفجرة
أرشيف يحتوي على واحد أو أكثر من ملفات ".class" ، والتي يتم تجميعها جميعًا. ال
قد يتم ضغط الأرشيف. الملفات الموجودة في الأرشيف والتي لا تنتهي بـ .صف دراسي .
تعامل كملفات موارد ؛ يتم تجميعها في ملف الكائن الناتج كـ النواة:
عناوين URL.

@ملف
ملف يحتوي على قائمة بأسماء ملفات الإدخال مفصولة بمسافات بيضاء. (حاليا ، هذه
يجب أن تكون جميعها ملفات مصدر ".java" ، ولكن قد يتغير ذلك.) يتم تجميع كل ملف مسمى ،
تمامًا كما لو كان في سطر الأوامر.

مكتبة.a
مكتبة.وبالتالي
-lليبنام
مكتبات لاستخدامها عند الربط. انظر دول مجلس التعاون الخليجي كتيب.

يمكنك تحديد أكثر من ملف إدخال واحد على gcj سطر الأوامر ، وفي هذه الحالة سوف يفعلون
يتم تجميعها كلها. إذا قمت بتحديد "-o اسم الملف" الخيار ، جميع ملفات الإدخال ستكون
جمعت معًا ، مما أدى إلى إنتاج ملف إخراج واحد ، يسمى اسم الملف. هذا مسموح به حتى
عند استخدام "-S" أو "-c" ، ولكن ليس عند استخدام "-C" أو "--resource". (هذا امتداد
ما وراء ما هو سهل دول مجلس التعاون الخليجي يسمح.) (إذا تم تحديد أكثر من ملف إدخال واحد ، فيجب أن تكون جميعها
حاليًا هي ملفات ".java" ، على الرغم من أننا نأمل في إصلاح هذا.)

إدخال مزيد من الخيارات
gcj لديه خيارات للتحكم في المكان الذي يبحث فيه عن الملفات التي يحتاجها. على سبيل المثال، gcj ربما
تحتاج إلى تحميل فئة يشار إليها بالملف الذي طُلب منه تجميعه. يحب
مترجمين آخرين للغة جافا ، gcj لديه فكرة فئة مسار. يوجد
العديد من الخيارات ومتغيرات البيئة التي يمكن استخدامها لمعالجة مسار الفئة.
متى gcj يبحث عن فئة معينة ، فإنه يبحث في مسار الفصل بحثًا عن المطابقة .صف دراسي
or جافا ملف. gcj يأتي مع مسار فئة مدمج يشير إلى المثبت
libgcj.jar، وهو ملف يحتوي على جميع الفئات القياسية.

في النص أدناه ، يمكن أن يشير دليل أو مكون مسار إما إلى دليل حقيقي
على نظام الملفات ، أو إلى ملف الرمز البريدي or جرة الملف الذي gcj سيبحث كما لو كان ملف
الدليل.

-Iدير
يتم الاحتفاظ بجميع الدلائل المحددة بواسطة "-I" بالترتيب وإضافتها إلى مسار الفئة
شيدت من جميع الخيارات الأخرى. ما لم يكن التوافق مع أدوات مثل "javac"
مهم ، نوصي دائمًا باستخدام "-I" بدلاً من الخيارات الأخرى لـ
التلاعب بمسار الفصل.

--classpath =مسار
هذا يحدد مسار الفصل إلى مسار، قائمة مسارات مفصولة بنقطتين (على Windows
أنظمة ، قائمة مسارات منفصلة بفاصلة منقوطة). هذا لا يتجاوز المدمج
("التمهيد") مسار البحث.

--CLASSPATH =مسار
مرادف مهمل لـ "--classpath".

--bootclasspath =مسار
مكان العثور على الفئات المضمنة القياسية ، مثل "java.lang.String".

--extdirs =مسار
لكل دليل في ملف مسار، ضع محتويات هذا الدليل في نهاية ملف
مسار الفصل.

كلاسبث
هذا متغير بيئة يحتوي على قائمة من المسارات.

يتم إنشاء مسار الفصل النهائي على النحو التالي:

* تأتي أولاً جميع الأدلة المحددة عبر "-I".

* لو --ممر محدد ، يتم إلحاق قيمته. خلاف ذلك ، إذا كان "CLASSPATH"
تم تحديد متغير البيئة ، ثم يتم إلحاق قيمته. خلاف ذلك ، فإن التيار
الدليل (".") مُلحق.

* إذا تم تحديد "--bootclasspath" ، قم بإلحاق قيمته. خلاف ذلك ، قم بإلحاق ملف
دليل النظام ، libgcj.jar.

* أخيرًا ، إذا تم تحديد "--extdirs" ، قم بإلحاق محتويات المحدد
الدلائل في نهاية مسار الفصل الدراسي. وإلا ، فقم بإلحاق محتويات ملف
ملحقات مدمجة في "$ (بادئة) / share / java / ext".

classfile الذي بناه gcj للفئة "java.lang.Object" (وموضوعة في "libgcj.jar")
يحتوي على سمة طول صفرية خاصة "gnu.gcj.gcj-compiled". المترجم يبحث عن
هذه السمة عند تحميل "java.lang.Object" وستبلغ عن خطأ إذا لم يتم العثور عليه ،
ما لم يتم التحويل البرمجي إلى bytecode (يمكن استخدام الخيار "-fforce-class-archive-check" في
تجاوز هذا السلوك في هذه الحالة بالذات.)

-فصول-قوة-ارشيف-الشيك
هذا يجبر المترجم على التحقق دائمًا من السمة الخاصة ذات الطول الصفري
"gnu.gcj.gcj-compiled" في "java.lang.Object" ويصدر خطأ إذا لم يتم العثور عليه.

-fsource =VERSION
يستخدم هذا الخيار لاختيار النسخة المصدرية المقبولة من قبل gcj. الافتراضي هو 1.5.

ترميزات
تستخدم لغة برمجة Java Unicode طوال الوقت. في محاولة للاندماج بشكل جيد
مع لغات أخرى ، gcj يسمح جافا تتم كتابة الملفات باستخدام أي ترميز تقريبًا. gcj
يعرف كيفية تحويل هذه الترميزات إلى ترميزها الداخلي في وقت الترجمة.

يمكنك استخدام "--encoding =اسم" خيار لتحديد ترميز (بحرف معين
set) لاستخدامها مع ملفات المصدر. إذا لم يتم تحديد ذلك ، فسيأتي الترميز الافتراضي من
لغتك الحالية. إذا كان النظام المضيف الخاص بك لا يحتوي على دعم محلي كافٍ ، فحينئذٍ gcj
يفترض أن يكون الترميز الافتراضي هو UTF-8 ترميز يونيكود.

لتنفيذ "--encoding" ، gcj ببساطة يستخدم روتين التحويل "iconv" للمنصة المضيفة.
هذا يعني ذلك في الممارسة gcj محدودة بإمكانيات النظام الأساسي المضيف.

تختلف الأسماء المسموح بها للوسيطة "- encoding" من منصة إلى أخرى (نظرًا لأنها
ليست موحدة في أي مكان). لكن، gcj تنفذ الترميز المسمى UTF-8
داخليًا ، لذلك إذا اخترت استخدام هذا لملفات المصدر الخاصة بك ، فيمكنك التأكد من ذلك
سيعمل على كل مضيف.

تحذيرات
gcj تنفذ عدة تحذيرات. كما هو الحال مع عامة أخرى دول مجلس التعاون الخليجي تحذيرات ، إذا كان خيار
شكل "-Wfoo" يتيح التحذير ، ثم "-Wno-foo" سيعطله. هنا اخترنا
توثيق شكل التحذير الذي سيكون له تأثير - الافتراضي هو
عكس ما هو مدرج.

- المعدلات الزائدة
مع هذا العلم ، gcj سوف يحذر من المعدلات الزائدة عن الحاجة. على سبيل المثال ، سوف يحذر
إذا تم إعلان طريقة الواجهة على أنها "عامة".

- فاصلة منقوطة خارجية
هذه تسبب gcj للتحذير من البيانات الفارغة. كانت البيانات الفارغة
إهمال.

-لا منتهية الصلاحية
هذا الخيار سوف يسبب gcj عدم التحذير عندما يكون الملف المصدر أحدث من مطابقته
ملف الفصل. بشكل افتراضي gcj سوف يحذر من هذا.

-Wno- مهملة
تحذير إذا تمت الإشارة إلى فئة أو أسلوب أو حقل تم إهماله.

-مذهل
هذا هو نفس دول مجلس التعاون الخليجي"- غير مرغوب فيه".

الجدار شاحن
هذا هو نفس "-معدلات زائدة-فاصلة منقوطة-غير مستخدم".

ربط
لتحويل تطبيق Java إلى برنامج قابل للتنفيذ ، تحتاج إلى ربطه بالمطلوب
المكتبات ، تمامًا مثل C أو C ++. يبحث الرابط افتراضيًا عن دالة عمومية مسماة
"الأساسية". نظرًا لأن Java ليس لديها وظائف عامة ، ويمكن لمجموعة من فئات Java
لديك أكثر من فئة واحدة باستخدام طريقة "رئيسية" ، فأنت بحاجة إلى السماح للرابط بمعرفة أي منها
تلك الطرق "الرئيسية" التي يجب أن تستدعيها عند بدء التطبيق. يمكنك فعل ذلك في
أي من هذه الطرق:

* حدد الفئة التي تحتوي على الطريقة "الرئيسية" المطلوبة عند ربط التطبيق ،
باستخدام علامة "- main" الموضحة أدناه.

* ربط حزمة (حزم) Java بمكتبة مشتركة (dll) بدلاً من ملف قابل للتنفيذ. ثم
قم باستدعاء التطبيق باستخدام برنامج "gij" ، مع التأكد من أن "gij" يمكنه العثور على ملف
المكتبات التي تحتاجها.

* اربط حزم (حزم) Java بالعلامة "-lgij" ، والتي ترتبط بالروتين "الرئيسي"
من الأمر "gij". هذا يسمح لك بتحديد الفئة التي أسلوبها "الرئيسي" لك
تريد تشغيله عند تشغيل التطبيق. يمكنك أيضًا استخدام أعلام "gij" أخرى ، مثل
علامات "-D" لتعيين الخصائص. استخدام مكتبة "-lgij" (بدلاً من "gij"
برنامج الآلية السابقة) له بعض المزايا: فهو متوافق مع السكون
الربط ، ولا يتطلب تكوين أو تثبيت مكتبات.

تتعلق خيارات "gij" بربط ملف تنفيذي:

- الرئيسي =اسم التصنيف
يستخدم هذا الخيار عند الربط لتحديد اسم الصنف الذي أسلوبه "الرئيسي"
يجب استدعاء عند تشغيل الملف القابل للتنفيذ الناتج.

-Dالاسم[=قيمنا]
لا يمكن استخدام هذا الخيار إلا مع "- main". يعرّف خاصية النظام المسماة الاسم
مع القيمة قيمنا. إذا قيمنا لم يتم تحديده ثم يتم تعيينه افتراضيًا على السلسلة الفارغة.
تتم تهيئة خصائص النظام هذه عند بدء تشغيل البرنامج ويمكن استرجاعها
في وقت التشغيل باستخدام طريقة "java.lang.System.getProperty".

-لجيج
قم بإنشاء تطبيق تكون معالجة سطر الأوامر الخاصة به هي معالجة الأمر "gij".

هذا الخيار بديل لاستخدام "- main"؛ لا يمكنك استخدام كليهما.

-استاتيك- libgcj
يؤدي هذا الخيار إلى إجراء الارتباط مقابل إصدار ثابت من وقت تشغيل libgcj
مكتبة. هذا الخيار متاح فقط في حالة وجود دعم الرابط المقابل.

تنبيه: قد يتسبب الارتباط الثابت لـ libgcj في حذف أجزاء أساسية من libgcj.
تستخدم بعض أجزاء libgcj الانعكاس لتحميل الفئات في وقت التشغيل. منذ أن يفعل الرابط
لا ترى هذه المراجع في وقت الارتباط ، فإنه يمكن حذف الفئات المشار إليها. ال
النتيجة عادةً (ولكن ليس دائمًا) يتم طرح "ClassNotFoundException" في وقت التشغيل.
يجب توخي الحذر عند استخدام هذا الخيار. لمزيد من التفاصيل انظر:
<http://gcc.gnu.org/wiki/Statically٪ 20 ربط٪ 20libgcj>

رمز جيل
بالإضافة إلى الكثيرين دول مجلس التعاون الخليجي خيارات التحكم في توليد الكود ، gcj لديها عدة خيارات
محددة لنفسها.

-C يستخدم هذا الخيار لمعرفة gcj لتوليد رمز بايت (.صف دراسي الملفات) بدلاً من الكائن
رمز.

--الموارد اسم المورد
يستخدم هذا الخيار لمعرفة gcj لتجميع محتويات ملف معين إلى التعليمات البرمجية الهدف
لذلك يمكن الوصول إليه في وقت التشغيل باستخدام معالج البروتوكول الأساسي كـ جوهر:/الموارد-
الاسم. لاحظ أن اسم المورد هو اسم المورد كما هو موجود في وقت التشغيل ؛ ل
على سبيل المثال ، يمكن استخدامه في استدعاء "ResourceBundle.getBundle". الملف الفعلي
يجب تحديد الاسم الذي سيتم تجميعه بهذه الطريقة بشكل منفصل.

-ftarget =VERSION
يمكن استخدام هذا مع -C لاختيار إصدار بايت كود المنبعث من gcj.
الافتراضي هو 1.5. عند عدم إنشاء رمز بايت ، لا يكون لهذا الخيار أي تأثير.

-d دليل
عند استخدامه مع "-C" ، يتسبب هذا في إنشاء كل شيء .صف دراسي الملفات المراد وضعها في
دليل فرعي مناسب لـ دليل. بشكل افتراضي سيتم وضعها في الدلائل الفرعية
من دليل العمل الحالي.

- التحقق من الحدود
افتراضيا، gcj يولد رمزًا يتحقق من حدود جميع فهرسة المصفوفة
عمليات. باستخدام هذا الخيار ، يتم حذف هذه الفحوصات ، مما قد يؤدي إلى تحسين الأداء
للتعليمات البرمجية التي تستخدم المصفوفات على نطاق واسع. لاحظ أن هذا يمكن أن يؤدي إلى عدم القدرة على التنبؤ
السلوك إذا كانت الشفرة المعنية تنتهك بالفعل قيود حدود المصفوفة. هو - هي
آمن لاستخدام هذا الخيار إذا كنت متأكدًا من أن التعليمات البرمجية الخاصة بك لن تلقي بامتداد
"مؤشر مجموعة خارج الحدود استثناء".

-fno-store-check
لا تقم بإنشاء عمليات فحص مخزن المصفوفة. عند تخزين العناصر في المصفوفات ، تحقق من وقت التشغيل
يتم إنشاؤه بشكل طبيعي للتأكد من أن الكائن متوافق مع المهمة
نوع مكون المصفوفة (والذي قد لا يكون معروفًا في وقت الترجمة). مع هذا
الخيار ، تم حذف هذه الشيكات. هذا يمكن أن يحسن أداء الكود الذي يخزن
كائنات في المصفوفات بشكل متكرر. من الآمن استخدام هذا الخيار إذا كنت متأكدًا من أن
لن يقوم الكود أبدًا بإلقاء "ArrayStoreException".

-فجني
بدافع gcj هناك خياران لكتابة الطرق الأصلية: CNI و JNI. بشكل افتراضي
gcj يفترض أنك تستخدم CNI. إذا كنت تقوم بتجميع فصل دراسي باستخدام طرق أصلية ، و
يتم تنفيذ هذه الطرق باستخدام JNI ، ثم يجب عليك استخدام "-fjni". هذا الخيار
الأسباب gcj لإنشاء بذرة والتي ستستدعي أساليب JNI الأساسية.

-fno- تأكيد
لا تتعرف على الكلمة الأساسية "تأكيد". هذا للتوافق مع الإصدارات القديمة
من مواصفات اللغة.

-fno- الأمثل- ثابت- فئة التهيئة
عندما يكون مستوى التحسين أكبر أو يساوي "-O2" ، gcj سيحاول تحسين
طريقة إجراء المكالمات في وقت التشغيل لتهيئة الفئات الثابتة عند استخدامها لأول مرة
(لا يتم تنفيذ هذا التحسين إذا تم تحديد "-C".) عند التحويل البرمجي إلى أصلي
رمز "-fno-optimize-static-class-initialization" سيؤدي إلى إيقاف تشغيل هذا التحسين ،
بغض النظر عن مستوى التحسين قيد الاستخدام.

--تعطيل التأكيدات [=فئة أو حزمة]
لا تقم بتضمين رمز للتحقق من التأكيدات في الكود المترجم. لو
"=فئة أو حزمة " يفتقد إلى تعطيل إنشاء كود التأكيد لجميع الفئات ،
ما لم يتم تجاوزها بعلامة "- تمكين - تأكيدات" أكثر تحديدًا. لو فئة أو حزمة
هو اسم فئة ، يقوم فقط بتعطيل إنشاء عمليات التحقق من التأكيد داخل الفئة المسماة أو
فصولها الداخلية. لو فئة أو حزمة هو اسم حزمة ، يعطل إنشاء
عمليات التحقق من التأكيد داخل الحزمة المحددة أو الحزمة الفرعية.

بشكل افتراضي ، يتم تمكين التأكيدات عند إنشاء ملفات فئة أو عند عدم التحسين ،
وتعطيله عند إنشاء ثنائيات محسّنة.

- تأكيدات قابلة للتمكين [=فئة أو حزمة]
يولد رمز للتحقق من التأكيدات. ربما تم تسمية الخيار بشكل خاطئ ، لأنك لا تزال بحاجة إليه
لتشغيل التحقق من التأكيد في وقت التشغيل ، ونحن لا ندعم أي طريقة سهلة للقيام بذلك
الذي - التي. لذا فإن هذه العلامة ليست مفيدة جدًا حتى الآن ، باستثناء تجاوزها جزئيًا
"- تأكيدات تعطيل".

-إرسال مباشر
gcj لديه توافق ثنائي خاص ABI ، والذي يتم تمكينه بواسطة
خيار "إرسال مباشر". في هذا الوضع ، يتم إنشاء الكود بواسطة gcj يكرم ال
يضمن التوافق الثنائي في مواصفات لغة جافا ، والنتيجة
لا تحتاج ملفات الكائن إلى الارتباط المباشر مع تبعياتها. في حين أن،
يتم البحث عن جميع التبعيات في وقت التشغيل. هذا يسمح بالاختلاط الحر بين المترجمين و
كود المترجمة.

لاحظ أنه ، في الوقت الحالي ، لا يمكن استخدام "-findirect-dispatch" إلا عند التحويل البرمجي .صف دراسي
الملفات. لن يعمل عند التجميع من المصدر. CNI أيضًا لا تعمل مع
التوافق الثنائي ABI. سيتم رفع هذه القيود في المستقبل
الافراج.

ومع ذلك ، إذا جمعت كود CNI باستخدام ABI القياسي ، فيمكنك تسميته من الكود
بنيت مع التوافق الثنائي ABI.

-فصول- fbootstrap
يمكن استخدام هذا الخيار لإخبار "libgcj" أنه يجب تحميل الفئات المترجمة بواسطة
محمل التمهيد ، وليس محمل فئة النظام. بشكل افتراضي ، إذا قمت بتجميع فئة
وربطه بملف قابل للتنفيذ ، سيتم التعامل معه كما لو تم تحميله باستخدام
محمل فئة النظام. هذا مناسب ، لأنه يعني أن أشياء مثل
سيتم البحث عن "Class.forName ()" كلاسبث للعثور على الدرجة المطلوبة.

- انعكاس منخفض
هذا الخيار يسبب الكود الذي تم إنشاؤه بواسطة gcj لاحتواء كمية مخفضة من الفصل
البيانات الوصفية المستخدمة لدعم انعكاس وقت التشغيل. تكلفة هذه المدخرات هي خسارة
القدرة على استخدام قدرات انعكاس معينة لوقت تشغيل Java القياسي
بيئة. عند تعيين جميع البيانات الوصفية باستثناء ما هو مطلوب للحصول على الصحيح
يتم التخلص من دلالات وقت التشغيل.

للكود الذي لا يستخدم الانعكاس (مثل التسلسل أو RMI أو CORBA أو طرق الاستدعاء
في حزمة "java.lang.reflect") ، سينتج عن "انعكاس منخفض"
عملية مع توفير في حجم الكود القابل للتنفيذ.

JNI ("-fjni") والتوافق الثنائي ABI ("-findirect-dispatch") لا يعملان
بشكل صحيح دون البيانات الوصفية الانعكاس الكامل. لهذا السبب ، يعد خطأ في الاستخدام
هذه الخيارات مع "انعكاس مخفض".

تنبيه: في حالة عدم وجود بيانات وصفية انعكاسية ، يجوز للرمز الذي يستخدم "SecurityManager"
لا تعمل بشكل صحيح. قد يفشل أيضًا استدعاء "Class.forName ()" إذا توفرت طريقة الاستدعاء
لا انعكاس البيانات الوصفية.

تكوين الوقت مزيد من الخيارات
بعض gcj تؤثر خيارات إنشاء الكود على ABI الناتج ، وبالتالي يمكن أن يكون فقط
يُعطى بشكل مفيد عند تكوين "libgcj" ، حزمة وقت التشغيل. "libgcj" يضع ملف
الخيارات المناسبة من هذه المجموعة إلى أ المواصفات الملف الذي تمت قراءته بواسطة gcj. هذه الخيارات
مدرجة هنا للاكتمال ؛ إذا كنت تستخدم "libgcj" فلن ترغب في اللمس
هذه الخيارات.

-فيوز- بوهم- GC
يتيح ذلك استخدام رمز تعليم Boehm GC النقطي. على وجه الخصوص هذا يسبب
gcj لوضع واصف تعليم كائن في كل vtable.

تزامن -fhash
بشكل افتراضي ، بيانات المزامنة (البيانات المستخدمة من أجل "المزامنة" و "الانتظار" و
"notify") يُشار إليها بكلمة في كل كائن. مع هذا الخيار gcj يفترض ذلك
يتم تخزين هذه المعلومات في جدول تجزئة وليس في الكائن نفسه.

روتين-فتيل-قسمة-روتين
في بعض الأنظمة ، يتم استدعاء روتين المكتبة لأداء تقسيم عدد صحيح. هذا هو
مطلوب للحصول على استثناء معالجة صحيحة عند القسمة على صفر.

- تحقق من المراجع
في بعض الأنظمة ، من الضروري إدراج عمليات تحقق مضمنة عند الوصول إلى كائن
عبر مرجع. في الأنظمة الأخرى ، لن تحتاج إلى هذا لأن المؤشر الفارغ يصل
يتم التقاطها تلقائيًا بواسطة المعالج.

-الفتوز-الذري-البنيات
في بعض الأنظمة ، يمكن لمجلس التعاون الخليجي إنشاء رمز للعمليات الذرية المدمجة. استخدم هذا
الخيار لإجبار gcj على استخدام هذه العناصر المدمجة عند ترجمة كود Java. اين هذا
القدرة موجودة ، يجب اكتشافها تلقائيًا ، لذلك لن تحتاجها عادةً
لاستخدام هذا الخيار.

استخدم aarch64-linux-gnu-gcj-5 عبر الإنترنت باستخدام خدمات onworks.net



أحدث برامج Linux و Windows عبر الإنترنت