الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مجموعة ادوات للبرمجة تحت اللينكس Gnu Toolchains

بدأه eramax في 7 نوفمبر 2008 · 7 رد · 2,403 مشاهدة · في نظام تشغيل Unix & Linux
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بســم الله الـرحمــن الرحيــم

اخوانى الاعزاء السلام عليكــم ورحمـة الله وبركاتــة اتمنى ان يكون الجميع بخير

نبدأ حديثا اليوم عن طرح شرح لمجموعة من ال Tools التى نستخدمها فى البرمجة تحت اللينكس

اولا ما معنى Toolchains هى بعض الادوات التى تستخدم فى تصميم التطبيقات وايضا انظمة التشغيل وتحتوى على مترجم يترجمة برنامجنا"Compile" وعمل تنقيح "Debug" لبرنامجنا باستخدام هذه المجموعة من الادوات نستطيع ترجمة اى برنامج نريدة من اصغر برنامج الى الكيرنال نفسه

تضم ال GNU Toolchains الاتى

1-Compiler (gcc)

2-Linker (ld)

3-Assembler (as)

4-Debugger (gdb)

5-Autoconf

6-Automake

7-make

8-Autoheader

9-Libtool

10-GNU build system

سنحاول بقدر الامكان شرح تلك المجموعة او بعضها بشئ من التفصيل اتمنى من الاخوة المشاركة حتى نضع كل شئ عن ال GNU toolchains فى هذا الموضوع

اخوكم احمد عصام EraMaX

تم تعديل هذه المشاركة بواسطة eramax في 7 نوفمبر 2008 في 20:02

amdvsintel22.jpg

--i use AMD--

لا اله الا الله محمد رسول الله

أستعن بالله و لا تعجز

تابعنى على تويتر

***

#2

الاداة GCC

مقدمة:-

ال GCC هى اختصار GNU Compiler Collection وهى مجموعة من المترجمات تم البدء فى تصميمها عام 1987 على يد Richard Stallman مؤسس مشروع ال GNU للمصادر المفتوحة وكان الهدف منه البدء فى انتاج البرمجيات المفتوحة الحرة باستخدام هذا الكمبيلر الحر وهو جزء هام جدا فى GNU toolchain وهو standard compiler لاغلب انظمة Unix-like مثل الLinux و BSD و Mac OS X ويستطيع ترجمة لاكثر من computer architectures وايضا ترجمة برمجيات ل embedded platforms مثل

Symbian

AMCC and Freescale Power Architecture-based chips

Playstation

Sega Dreamcast

ولقد كان ال GCC فى الاصل هى اختصار GNU C Compiler ولكن بعدما ظهر ال G++ الخ تم تغير الاسم الى GNU Compiler Collection

Supported Architectures:-

* Alpha * ARM * Atmel AVR * Blackfin

* HC12 * H8/300 * IA-32 (x86) * x86-64

* IA-64 * Motorola 68000 * MIPS * PA-RISC

* PDP-11 * PowerPC * R8C/M16C/M32C * SPU

* System/390/zSeries* SuperH * SPARC * VAX

Supported Languages:-

C, C++ (G++), Java (GCJ), Ada (GNAT), Objective-C, Objective-C++, and Fortran (GFortran). Also available, but not in standard are: Modula-2, Modula-3, Pascal, PL/I, D (gdc), Mercury, VHDL (GHDL).[11] A popular parallel language extension, OpenMP, is also supported.

الترخيض :-

رخصة GNU General Public GPL

How To Use:-

نفترض ان لدينا سورس كود ونريد ان نقوم بترجمته ثم تشغيله

اولا لابد لنا من كتاب السورس على ملف ونحفظه بالامتداد المناسب

على سبيل المثال :-

vim main.c

ففى هذا الامر قمنا باستخدام برنامج VIM لانشاء ملف جديد باسم main.c و من الملاحظ انه بامتداد C اى انه ملف مكتوب بلغة السى

نقوم باضافة السورس وعلى سبيل المثال الكود الاتى :-

  1.  
  2. #include<stdio.h>
  3.  
  4.  
  5. int get_sqr(int x){return x*x;}
  6.  
  7. int main()
  8. {
  9. printf("Welcome in my program n");
  10. printf("Enter a Number :");
  11. int x;
  12. scanf("%d",&x);
  13. int sq;
  14. sq = get_sqr(x);
  15. printf("The Sqaure of %d is %dn",x,sq);
  16. printf("Program Ended Successfullyn");
  17. return 0;
  18. }
  19.  
  20.  
  21.  
  22.  
  23.  

تذكروا هذا البرنامج لاننا سنحتاجه فى كامل الموضوع

وظيفة هذا الكود بكل بساطة هى ان ياخذ من المستخدم رقم ثم يقوم بعرض مربع هذا الرقم

كيف نقوم بترجمه هذا الملف الى ملف تنفيذى

اولا لابد ان نستخد الكمبيلر المناسب على سبيل المثال

gcc for C Lanuage

g++ for C++ Language

قبل البدء لابد من انك كمستخدم لنظام اللينكس تعرف ان اى امر فى ال Terminal يكون على هذا الشكل

command options arguments

وغالبا ال Options تكون على احرف مسبوقة بشرطه (-) مثل (-a)

طريقة ترجمة ملف source code

eramax@eramax-desktop:~/Desktop/gdx$ gcc -o sqr main.c

eramax@eramax-desktop:~/Desktop/gdx$

طريقة تشغيل البرنامج التنفيذى بعد عملية الترجمة

eramax@eramax-desktop:~/Desktop/gdx$ ./sqr

Welcome in my program

Enter a Number :15

The Sqaure of 15 is 225

Program Ended Successfully

eramax@eramax-desktop:~/Desktop/gdx$

طريقة ترجمة برنامج متعدد الملفات Multiple Source Files

نفترض ان لدينا المثال الاتى :-

اولا ملف ال main.c

  1.  
  2. #include<stdio.h>
  3. #include "sqr.h"
  4.  
  5. int main()
  6. {
  7. printf("Welcome in my program n");
  8. printf("Enter a Number :");
  9. int x;
  10. scanf("%d",&x);
  11. int sq;
  12. sq = get_sqr(x);
  13. printf("The Sqaure of %d is %dn",x,sq);
  14. printf("Program Ended Successfullyn");
  15. return 0;
  16. }
  17.  
  18.  
  19.  
  20.  
  21.  

ثانيا ملف ال sqr.h

  1.  
  2. int get_sqr(int x){return x*x;}
  3.  
  4.  
  5.  
  6.  
  7.  

فنقوم بعمل Compile بنفس الطريقة الاولى

eramax@eramax-desktop:~/Desktop/gdx$ gcc -o thx main.c

eramax@eramax-desktop:~/Desktop/gdx$ ./thx

Welcome in my program

Enter a Number :5

The Sqaure of 5 is 25

Program Ended Successfully

eramax@eramax-desktop:~/Desktop/gdx$

ولكن هناك طريقة افضل وهى ان نقوم بعمل compile لكل ملف source code ثم نعمل Link للكل معا لينج لنا البرنامج

ولكن فى هذه الحالة نقوم بحذف سطر من ال main.c

  1.  
  2. #include<stdio.h>
  3. //#include "sqr.h"
  4.  
  5. int main()
  6. {
  7. printf("Welcome in my program n");
  8. printf("Enter a Number :");
  9. int x;
  10. scanf("%d",&x);
  11. int sq;
  12. sq = get_sqr(x);
  13. printf("The Sqaure of %d is %dn",x,sq);
  14. printf("Program Ended Successfullyn");
  15. return 0;
  16. }
  17.  
  18.  
  19.  
  20.  
  21.  

فقد قمنا بعدم عمل include لها

وايضا لابد من تغير امتداد ملف ال sqr.h الى sqr.c

ولترجمة الملفات يكون على الشكل الاتى :-

eramax@eramax-desktop:~/Desktop/gdx$ gcc -c main.c

eramax@eramax-desktop:~/Desktop/gdx$ mv sqr.h sqr.c

eramax@eramax-desktop:~/Desktop/gdx$ gcc -c sqr.c

eramax@eramax-desktop:~/Desktop/gdx$ gcc -o thy main.o sqr.o

eramax@eramax-desktop:~/Desktop/gdx$ ./thy

Welcome in my program

Enter a Number :7

The Sqaure of 7 is 49

Program Ended Successfully

eramax@eramax-desktop:~/Desktop/gdx$

فى المثال السابق قمنا بدمج ملفات ال obj كلها معا وفى حالتنا كان ملف ال sqr.o هو بمثابة library لبرنامجنا ولذلك تم دمج هذه المكتبة داخل main obj file ولكن هناك اسلوب اخر وهو استخدام ال shared library

وفى هذه الحالة لن نقوم بدمج المكتبة داخل برنامجنا ولكن سنقوم بوضعها فى path معين ثم نقوم بعمل load لها فى ال run-time ولعمل ذلك اتبع المثال الاتى :-

eramax@eramax-desktop:~/Desktop/gdx$ gcc -c main.c

eramax@eramax-desktop:~/Desktop/gdx$ gcc -fPIC -c sqr.c

eramax@eramax-desktop:~/Desktop/gdx$ gcc -shared -o libsqrx.so sqr.o

eramax@eramax-desktop:~/Desktop/gdx$ gcc -o ths -lsqrx -L. main.o

eramax@eramax-desktop:~/Desktop/gdx$ export LD_LIBRARY_PATH=`pwd`

eramax@eramax-desktop:~/Desktop/gdx$ ./ths

Welcome to my program

Enter a Number :4

The Sqaure of 4 is 16

Program Ended Successfully

eramax@eramax-desktop:~/Desktop/gdx$

من فؤائد ال shared library ان برنامجك يصبح حجمه اقل ويمكنك تغير ال libraries بدون عمل اعادة compile للبرنامج ككل كما انها مفيدة فى حالة ال security فتستطيع ان تقوم بتنقيح مكتبتك بدون اصدار اصدارة جديدة من البرنامج

لابد ان تقوم بعمل environment variable باسم LD_LIBRARY_PATH محتواه قيمة ال pwd variable حتى يتمكن برنامجك من ايجاد ال shared library الخاصة به فى مجلد ال pwd الحالى او انك تضع ال libsqrx.so داخل مجلد /usr/lib حتى يكون بمثابة system lib والكل يستطيع عمل load له

للتاكد من ان كل المكتبات التى يحتاجها برنامجك متواجده استخدم الامر :-

eramax@eramax-desktop:~/Desktop/gdx$ ldd ths

linux-gate.so.1 => (0xb7fc3000)

libsqrx.so => /home/eramax/Desktop/gdx/libsqrx.so (0xb7fbf000)

libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7e57000)

/lib/ld-linux.so.2 (0xb7fc4000)

eramax@eramax-desktop:~/Desktop/gdx$

ففى هذه الحالة يوضع لنا الامر ldd كل ال shared libraries التى يحتاجها برنامجنا لكى يعمل وكل مكتبه وال path الخاص بها

لمعلوماتك هناك standard library تحتوى على كل ال Basic IO function والتى تعمل من فوقها دالة ال printf وغيرها وهذه المكتبة تسمى GLIB وهى اختصار GNU LIBRARY وهذه المكتبة يتم دمجها افتراضيا by default عندما تعمل compile ويتم دمجها بطريقة static فى برنامجك

GCC Options

General Options:-

-c

عمل compile للسورس كود واخراج ملف يحمل اسم ملف السورس مع الامتداد .o وهو ملف ال object file

-S

اخراج الكود المناظر بلغة الاسيمبلى ويكون اسم الملف الخارج هو نفس اسم ملف السورس مع الامتداد .s

مثال على ذلك :-

برنامج به فقط جملة طباعة جملة

printf("Welcome\n");

eramax@eramax-desktop:~/Desktop/Root/gdx/pro$ gcc -c -S main.c

eramax@eramax-desktop:~/Desktop/Root/gdx/pro$ ls

main.c main.o main.s

eramax@eramax-desktop:~/Desktop/Root/gdx/pro$ cat main.s

.file "main.c"

.section .rodata

.LC0:

.string "Welcome"

.text

.globl main

.type main, @function

main:

leal 4(%esp), %ecx

andl $-16, %esp

pushl -4(%ecx)

pushl %ebp

movl %esp, %ebp

pushl %ecx

subl $4, %esp

movl $.LC0, (%esp)

call puts

movl $0, %eax

addl $4, %esp

popl %ecx

popl %ebp

leal -4(%ecx), %esp

ret

.size main, .-main

.ident "GCC: (GNU) 4.2.3 (Ubuntu 4.2.3-2ubuntu7)"

.section .note.GNU-stack,"",@progbits

eramax@eramax-desktop:~/Desktop/Root/gdx/pro$

-E

اخراج الكود الكامل الذى يتكون من كود السورس الخاص بنا وبعض ال implementation للدوال التى نستدعيها فى برنامجنا مثل printf

وبعض ال preprocessors التى يقوم بها الكمبيلر تلقائيا على برنامجنا لاحظ بمعنى اخر هذا هو ملف السورس قبل بدء عمل ال compile لمعنى اخر هذا هو preprocessing file لينتج ال object file ويتم عرض الملف على شاشة الترمنال

-o fileName

من خلال هذا الخيار نتمكن من ان يكون ال output file باسم نحن نختاره على سبيل المثال اذا قمنا بعمل compile مع ل\link فى نفس الوقت من خلال الامر

eramax@eramax-desktop:~/Desktop/gdx$ gcc -c main.c

eramax@eramax-desktop:~/Desktop/gdx$ gcc -c sqr.c

eramax@eramax-desktop:~/Desktop/gdx$ gcc main.o sqr.o

eramax@eramax-desktop:~/Desktop/gdx$ ./a.out

Welcome to my program

Enter a Number :4

The Sqaure of 4 is 16

Program Ended Successfullyوفى

eramax@eramax-desktop:~/Desktop/gdx$

ففى المثال السابق اذا لم نحدد له output file name سيقوم by default بعمل ملف باسم a.out ويكون هذا هو برنامجنا

-pipe

وظيفة هذا الخيار هو فى اثناء عملية ال Compilation لا يتم التراسل عبر مراحل ال Compile الى ال Assembler عبر ملفات موقته ولكن يكون التراسل عبر pipe

--help

عرض قائمة للمساعدة

-version

عرض رقم اصدارة ال gcc لديك

المصدر http://www.redhat.com/docs/manuals/enterpr...ll-options.html

C Language Options:-

-ansi

وفى هذه الحالة فانك تطلب من ال compiler ان يقوم بعمل compile لبرنامجك تبعا لل ANSI C ولا يستخدم اى GNU Extensions مثل asm و typeof وهم macros

-std=

وبهذا الخيار تحدد اى ال standard تريد برنامجك ان يترجم تبعا لها

فمثلا لدينا المعايير الاتية

c89 == ANSI

c99

gnu89

c++98

gnu++98

-fno-asm

وفى هذا الخيار تقوم بمنع استخدام ال GNU Extensions المدعومة مثل asm او typeof

-funsigned-char

وهذا الخيار يجعل اى متغير من نوع char مستخدم داخل برنامجنا هو من نوع unsigned char اى انه ياخذ قيمة من 0 الى 255

-fsigned-char

ومن هذا الخيار يجعل اى متغير من نوع char مستخدم داخل برنامجنا هو من نوع signed char ياخذ قيمة تبدأ من -128 الى 127

-fwritable-strings

وهو حفظ ال string constant فى writable data segment اى منطقة قابلة لتعديل ال string الذى بها وبهذا تستطيع تغير ال string constant من خلال برنامجك وهذا الخيار غير محبذ لان الثوابت لابد ان تكون فى مكان غير قابل للكتابة عليه

المصدر http://www.redhat.com/docs/manuals/enterpr...ct-options.html

C++ Language Options:-

-fabi -version=n

من خلال هذا الخيار تحدد رقم اصدارة C++ ABI التى تريد برنامجك ان يترجم تبعا لها

لمعلوماتك ABI هى اختصار Application Binary Interface وهى باختصار تضم كل ذلك

The object code interfaces between user C++ code and the implementation-provided system and libraries. This includes the memory layout for C++ data objects, including both predefined and user-defined data types, as well as internal compiler generated objects such as virtual tables. It also includes function calling interfaces, exception handling interfaces, global naming, and various object code conventions.

المصدر http://www.codesourcery.com/public/cxx-abi/abi.html

-fno-const-strings

وهو حفظ ال string constant ك char * وليس const char * وهذا حتى تتمكن من تعديل محتواها فى ال run-time

-fno-for-scope

عندما تقوم بتعريف متغير اثناء كتابة جملة ال for مثل

  1.  
  2. #include<iostream.h>
  3. int main()
  4. {
  5. for(int x=0;x<3;x++);
  6. cout<<"x is "<<x<<endl;
  7. return 0;
  8. }
  9.  
  10.  
  11.  
  12.  
  13.  

ففى هذا المثال انت تريد طباعة قيمة المتغير x الذى قمت بتعريفه اثناء بدء ال for loop فبهذا الخيار انت تجعل المتغير x له ال scope حتى نهاية الblock الذى يحوى ال for loop وليس loop block وبهذا فانك تستطيع ان تتعامل مع هذا المتغير من داخل وخارج ال loop

خرج المثال :-

eramax@eramax-desktop:~/Desktop/gdx/tt/dd$ g++ -fno-for-scope -o th main.cpp

eramax@eramax-desktop:~/Desktop/gdx/tt/dd$ ./th

x is 3

eramax@eramax-desktop:~/Desktop/gdx/tt/dd$

المصدر http://www.redhat.com/docs/manuals/enterpr...ct-options.html

Warning Options:-

-Wall

وهى عرض كل ال warnings التى ممكن ان تكون مثل عدم ترجيع قيمة من الدالة او unused variable عندما تعرف متغير ولا تستخدمه فى باقى البرنامج الخ...

المصدر http://www.redhat.com/docs/manuals/enterpr...ng-options.html

Debugging Options:-

-g

ومن خلال هذا الخيار تجعل ال Compiler يقوم باضافة بعد المعلومات التى تساعد فى عملية ال debugging وتحفظ هذه المعلومات تبعا لواحدة من ال formats الاتية :-

stabs, COFF, XCOFF, or DWARF

ويقوم المنقح GDB بفهم هذه المعلومات حتى يتمكن من عمل Tracing للبرنامج بافضل طريقة

-ggdb

وفى هذا الخيار تقوم بدمج معلومات ال Debugging داخل الملف الناتج (a.out) ويكون بصيغة لا يفهمها الا ال GDB مع استخدام ال GDB extensions التى تتيح له ادوات اضافية فى التنقيح

-gstabs

وفى هذا الخيار انت تمنع استخدام ال GDB extensions

-Q

تجعل الكمبيلر يعرض اسم كل function قد اتم عمل Compile لها

-frandom-seed=string

بهذا الخيار انت تقوم بتحديد ال seed الذى ستستخدمه دالة ال random ويفضل ان يكون متغير تبعا للزمن حتى يكون احتمال ان تكون الارقام عشاوائية ومختلفة عن المرات السابق لك تشغيل البرنامج كبير

-time

عرض الوقت المستخدم لعمل ال Compile من خلال C Compiler وهى تختصر الى cc1

وايضا عرض المدة التى اخذها ال Assembler وتختصر الى as

مثال بسيط

eramax@eramax-desktop:~/Desktop/gdx/tt$ gcc -c -time main.c

# cc1 0.02 0.00

# as 0.00 0.00

eramax@eramax-desktop:~/Desktop/gdx/tt$

-ftime-report

له نفس استخدام الخيار -time

مثال

eramax@eramax-desktop:~/Desktop/gdx/tt$ gcc -c -ftime-report main.c

Execution times (seconds)

preprocessing : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.01 (25%) wall 69 kB ( 7%) ggc

lexical analysis : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.01 (25%) wall 0 kB ( 0%) ggc

parser : 0.02 (100%) usr 0.00 ( 0%) sys 0.01 (25%) wall 114 kB (11%) ggc

flow 2 : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.01 (25%) wall 1 kB ( 0%) ggc

TOTAL : 0.02 0.00 0.04 1

eramax@eramax-desktop:~/Desktop/gdx/tt$

المصدر http://www.redhat.com/docs/manuals/enterpr...ng-options.html

Optimization Options:-

-O0

وهى تعنى عدم عمل اى نوع من ال Optimization للكود

-O1

وهى تعنى عمل Optimization بدرجة بسيطة وهو يعمل على تقليل حجم البرنامج الناتج من تقليل وقت التنفيذ الخاص بالبرنامج وذلك لان الكود تم ترتيبه بشكل يسرع من ادائه

-O2

وهى درجة Optimization اعلى من O1

-O3

وهى اعلى درجة Optimization وتقلل الحجم لاقل قيمة مع ترتيب ال statements بشكل يجعلها تعمل اسرع وافضل

-Os

وهذا الخيار يهتم بعمل Optimization لحجم ال Executable file الناتج

ملحوظة :-

عندما تقوم بعمل Optimization للكود الخاص بك فان عملية ال Compilation تاخذ وقت اطول ومساحة كبيرة من ال Memory حتى تحاول ان تخرج من الكود الخاص بك بافضل ترتيب يحقق افضل اداء

اذا كنت تنوى ان تقوم بعمل Debugging لبرنامجك فربما تجد اختلافا فى اداء برنامجك وذلك بسبب ان ال Compile عدل على ترتيب ال statements وليس الترتيب الذى كتبت به انت

المصدر http://www.redhat.com/docs/manuals/enterpr...ze-options.html

Preprocessor Options:-

-Xpreprocessor -I dir

فى هذا الخيار تقول للكمبيلر ابحث عن ملفات الهيدر ايضا فى هذا ال directory

استبدل dir ب directory path

-Xpreprocessor -undef

يعمل هذا الخيار على عدم تعريف الماكروز الخاصة بال GCC مسبقا

-H

وظيفة هذا الخيار عرض قائمة بمسارات جميع ال Header files التى احتاجها برنامجنا لكى يترجم

مثال

البرنامج :-

  1.  
  2. #include<stdio.h>
  3. int main()
  4. {
  5. printf("Welcomen");
  6. return 0;
  7. }
  8.  
  9.  
  10.  
  11.  
  12.  

eramax@eramax-desktop:~/Desktop/gdx/pro$ gcc -c -H main.c

. /usr/include/stdio.h

.. /usr/include/features.h

... /usr/include/sys/cdefs.h

.... /usr/include/bits/wordsize.h

... /usr/include/gnu/stubs.h

.... /usr/include/bits/wordsize.h

.... /usr/include/gnu/stubs-32.h

.. /usr/lib/gcc/i486-linux-gnu/4.2.3/include/stddef.h

.. /usr/include/bits/types.h

... /usr/include/bits/wordsize.h

... /usr/include/bits/typesizes.h

.. /usr/include/libio.h

... /usr/include/_G_config.h

.... /usr/lib/gcc/i486-linux-gnu/4.2.3/include/stddef.h

.... /usr/include/wchar.h

... /usr/lib/gcc/i486-linux-gnu/4.2.3/include/stdarg.h

.. /usr/include/bits/stdio_lim.h

.. /usr/include/bits/sys_errlist.h

Multiple include guards may be useful for:

/usr/include/bits/stdio_lim.h

eramax@eramax-desktop:~/Desktop/gdx/pro$

المصدر http://www.redhat.com/docs/manuals/enterpr...or-options.html

Linker Options:-

-s

وظيفته اخراج ملف تنفيذى بدون اضافة ال symbol table وايضا بدون relocation information

-fPIC

اذا كنت تريد عمل مكتبة سوف تربط ديناميكيا فلابد من هذا الخيار الذى لا يجعلها مرتبطه بعناوين معينه فى الميمورى

-shared

وظيفته اخبار ال Linker بان يقوم ب Shared Link لهذه المكتبة

المصدر http://www.redhat.com/docs/manuals/enterpr...nk-options.html

Target Options:-

-b machine

ومن خلال هذا الخيار تستطيع ان تخرج برنامجا تنفيذيا يعمل على مكنة معينه بخصائص معينه مثل نوع Processor مختلف او تستخدم elf او ال PE

(لم يعمل معى هذا الخيار :) )

-V version

وظيفة هذا الخيار ان تجعل برنامجك يترجم باى رقم اصدارة سابقة لل gcc وعدم ترجمتها بالاصدارة الحالية

المصدر http://www.redhat.com/docs/manuals/enterpr...et-options.html

Machine Dependent Options:-

For i386 and x86-64 Options:-

-mcpu=cpu-type

وظيفة هذا الخيار انك تقيد برنامجك بمعالج واحد وتعطى الكمبيلر اسم هذا المعالج

من اسماء المعالجات (فئات المعالجات او العائلات) الاتى :-

i386, i486, i586, i686, pentium, pentium-mmx, pentiumpro, pentium2, pentium3, pentium4, k6, k6-2, k6-3, athlon, athlon-tbird, athlon-4, athlon-xp, athlon-mp, winchip-c6, winchip2, k8, c3 and c3-2.

-mfpmath=unit

وظيفة هذا الخيار انك تخبر الكمبيلر بان وحدة تنفيذ عمليات ال Floating Point هى من نوع unit

وهناك الانواع الاتية :-

387 او sse

-m32

بهذا الخيار انت تخبر الكمبيلر بان يخرج برنامجك ليعمل على معالج 32 بت

-m64

بهذا الخيار انت تخبر الكمبيلر بان يخرج برنامجك ليعمل على معالج 64 بت

-mcmodel=small

بهذا الخيار تخبر الكمبيلر بانك تريد برنامجك يبنى على small code model وهذا هو ال default

-mcmodel=kernel

اما هذا الخيار فتخبر الكمبيلر بان برنامجك سوف يبنى على kernel code model وهذا مستخدم فى Linux Kernel

-mcmodel=medium

بهذا الخيار انت تريد برنامج يبنى على medium model

المصدر http://www.redhat.com/docs/manuals/enterpr...el-options.html

http://www.redhat.com/docs/manuals/enterpr...voking-gcc.html

والى هنا ينتهى درسنا الاول اتمنى منكم الدعاء واتمنى لكم كل توفيق

اخوكم احمد عصام EraMaX

تم تعديل هذه المشاركة بواسطة eramax في 8 نوفمبر 2008 في 09:42

amdvsintel22.jpg

--i use AMD--

لا اله الا الله محمد رسول الله

أستعن بالله و لا تعجز

تابعنى على تويتر

***

#3

اشكرك اخي احمد ،،

سأقوم بقراءة الدرس ،،

هذا ما كنت ابحث عنه دائما.

معك ان شاء الله

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#4

السلام عليكم

جهد رائع وتشكر عليه

وعندي اقتراح

لا تسهب في شرح options و arguments الخاصة بالأمر ، حاول أن تشرح الأداة بشكل اجمالي:

بمعنى ، كل أداة يجب أن تذكر فيها الآتي:

-تعريف بوظيفة الأداة

-أهمية الأداة بالنسبة للمطور

-بعض الأمثلة المشهورة لاستخدام الأداة.

لأنه بذلك سيطول الشرح ، واقترح عليك أن تقوم بترجمة الكتب التي تقرأ منها ، أظن أن هذا أجدى.

حاول أن يكون المجهود يبذل في الاتجاه الصحيح

System Engineer

Red Hat Certified Engineer

Red Hat Certificate Number

805010381752078

#5

شكرا لك اخى "الاخير زمانه" واتمنى مشاركتك وانضمامك لشرح باقى ال toolchains المشوار لسه طويل

شكرا لك يا استاذ خالد وساحاول التقليل من شرح معظم ال options وجارى تحضير ال ld و ال as باذن الله

بالنسبة لمصدر الدراسة الاساسى فهو كتاب Professional Linux Programming

والله الموفق

EraMaX

تم تعديل هذه المشاركة بواسطة eramax في 10 نوفمبر 2008 في 18:06

amdvsintel22.jpg

--i use AMD--

لا اله الا الله محمد رسول الله

أستعن بالله و لا تعجز

تابعنى على تويتر

***

#6

السلام عليكم

توجد كتب أقوى في هذا المجال

GNU Autoconf, Automake, and Libtool

Managing Projects with GNU Make

أيضا لا غنى عن manuals الخاص بهذه الأدوات

لكن قبل أن تقرأهم يجب أن تأخذ فكرة عن عملهم ، وكتاب GNU Autoconf, Automake, and Libtool هو الكتاب الوحيد الذي تكلم عن هذه الأدوات ، وتوجد كتب برمجة أخرى ، لكنها كتبت فكرة سريعة عنهم.

System Engineer

Red Hat Certified Engineer

Red Hat Certificate Number

805010381752078

#7

ياريت أخ برق لو عندك الكتب ديه تضعها

وشرحك جميل يا eramax

ان أردت ان تستزيد من العلم فاهلاً بك فى مدونتى ولا تنسانى بالدعاء

هنا

#8

السلام عليكم و رحمة الله و بركاته

و انا من المتابعين

و السلام عليكم و رحمة الله و بركاته

السلام عليكم و رحمة الله و بركاته

و انا من المتابعين

و السلام عليكم و رحمة الله و بركاته

Mail : pc-moon@hotmail.com

من تواضع لله رفعه

قل خيرا أو اصمت

مواضيع مشابهة