COMPILE LÀ GÌ

     
Compiler là gì ? Cross Compiler là gì ? Nó có đối sánh tương quan gì tới một mạng lưới hệ thống nhúng ? mình cùng khám phá 1 số ít quan niệm cơ bản trong bài xích này nhé .Bạn sẽ xem : Compile là gì

Compiler

Compiler hay còn được gọi là trình biên dịch hoàn toàn có thể được hiểu là công việc dịch chuỗi câu lệnh được viết từ bỏ một ngôn ngữ lập trình thành chương trình tương tự dưới dạng ngôn từ máy tính, thường xuyên là ngôn từ ở thấp cấp hơn, ngữ điệu máy. Đơn giản dễ nắm bắt thì có thể tạm nói là nhờ vào Complier này mà file .c họ viết new được dịch thành tệp tin .hex .bin để nạp được xuống một MCU bất kỳ.

Bạn đang xem: Compile là gì


Bạn đang đọc: Nghĩa Của từ bỏ Compile Là Gì ? Định Nghĩa, Ví Dụ, lý giải Compile Trong giờ Tiếng Việt


Quá trình biên dịch

*
Chúng ta hoàn toàn rất có thể xem sơ đồ chi tiết cụ thể những cách từ Code / Build / Run sống hình sau
*
Thông thường nếu dùng chương trình nhằm lập trình như Keil C ví dụ điển hình thì chỉ cần ấn một nút Build / Run xong xuôi là vớ cả họ chỉ bài toán ngồi đợi và lịch trình được nạp trực tiếp vào chip luôn, mà lại ẩn ẩn dưới những nút này là một trong loạt hoạt động giải trí theo những bước như hình trên .

Cross Compiler/ Toolchain là gì ?

Cross Compiler hay còn được gọi là Toolchain trả toàn có thể được hiểu là 1 source code được viết trên laptop chạy trên chip Intel, sau khoản thời gian trải sang 1 cross compiler sẽ đã tạo ra file nhị phân có năng lượng chạy được trên một gốc rễ chip không giống là ARM. Một lấy ví dụ như cơ bản nhất là mình đã dùng một máy tính xách tay hệ điều hành cai quản Ubuntu nhằm build ra một tệp tin image trả toàn rất có thể chạy trên Raspberry Pi

*
*
: là mạng lưới hệ thống chạy chương trình vị host tạo ra, thường target là những máy vi tính nhúng dùng chip ARM, mặc dù nó cũng trả toàn có thể là một máy tính thông thường dùng chip hãng intel .Vậy phần đa thành phần của Cross Compiler là gì ?
*
Binutils: là 1 tập những công nắm để tạo ra và làm chủ file nhị phân (bin) của target CPUas : là assembler, nó hình thành mã nhị phân (binary code) từ bỏ assembler source codeld : trình links (linker)ar, ranlib : có mặt file nén .a, sử dụng như thể thư việnobjdump, readelf, size, nm, strings: phân tích file nhị phânstrip : để sa thải những phần thừa trong file nhị phân để giảm kích cỡ của chúng: là 1 trong tập những cách thức để tạo và quản ngại trị tệp tin nhị phân ( bin ) của target CPUas : là assembler, nó ra đời mã nhị phân ( binary code ) tự assembler source codeld : trình liên kết ( linker ) ar, ranlib : sinh ra file nén. A, sử dụng như thể thư việnobjdump, readelf, size, nm, strings : phân tích và đối chiếu file nhị phânstrip : để loại bỏ những phần quá trong tệp tin nhị phân nhằm giảm form size của chúngThông thường để cross-compiler một chương trình ta phải tùy chỉnh cấu hình biến vạn vật thiên nhiên và môi trường thiên nhiên mới trả toàn rất có thể compile đúng đượcVí dụ

$ export PATH=/path/to/compiler/bin:$PATH$ export CROSS_COMPILE=arm-none-linux-gnueabi- $ export CC=$CROSS_COMPILEgcc $ export CXX=$CROSS_COMPILEg++ $ export CPP=$CROSS_COMPILEcpp $ export AR=$CROSS_COMPILEar $ export AS=$CROSS_COMPILEas $ export LD=$CROSS_COMPILEld $ export RANLIB=$CROSS_COMPILEranlib $ export STRIP=$CROSS_COMPILEstrip C/C++ LibraryLibrary được sử dụng làm interface thân applications và kernel, hỗ trợ các C API chuẩn để tiện lợi phát triển ứng dụng. Một số libb có thể kể mang lại như: glibc, uClibc, eglibc, dietlibc, newlib, …

*
Kernel headerCung cấp những API cần thiết cho Applications và C Library giao tiếp với Kernel.

Xem thêm: Đăng Nhập Teams Trên Máy Tính, Đăng Nhập Và Bắt Đầu Với Teams

*
GCC compilergcc, c++, g++ : compilerTrình biên dịch trong khối hệ thống Linux, compile cho rất nhiều ngôn ngữ cùng nhiều kiến trúc CPU khác biệt như ARM, MIPS, PowerPC, SuperH, x86; tuy vậy mình chỉ nhắc đến ngôn ngữ C/C++ và kiến trúc CPU là ARM cùng x86.GDB Debugger: Trình gỡ rối, giúp đỡ cho quá trình phát hiện tại lỗi lúc develop application.

Xem thêm: Một Cái Sim Bao Nhiêu Tiền ? Mua Sim Viettel Ở Đâu Uy Tín? Sim Viettel Bao Nhiêu Tiền

Ví dụ cùng với GCC Compiler

Cài đặt GCC

Trước hết, bản thân thực hiện công việc với GCC trên máy tính xách tay dùng Ubuntu nhé

Cung cấp các API cần thiết cho Applications với C Library tiếp xúc với Kernel.gcc, c++, g++ : compilerTrình biên dịch trong khối hệ thống Linux, compile cho tương đối nhiều ngôn ngữ cùng nhiều phong cách xây dựng CPU khác biệt như ARM, MIPS, PowerPC, SuperH, x86; tuy nhiên mình chỉ kể đến ngôn ngữ C/C++ và kiến trúc CPU là ARM với x86.GDB Debugger: Trình gỡ rối, trợ giúp cho quá trình phát hiện tại lỗi khi develop application.Trước hết, bản thân thực hiện quá trình với GCC trên máy tính dùngnhé


Thực hiện check version hiện có của gcc / g + + và setupUSD gcc — version USD g + + — version USD sudo apt-get install gcc g + +

Ví dụ

Xét một lấy ví dụ như cơ bạn dạng với chương trình C tính căn bậc 2 của 4 như sauXét một lấy ví dụ như cơ bản với lịch trình C tính căn bậc 2 của 4 như sau# include # include int main ( int argc, char * * argv ) double x ; x = sqrt ( 4 ) ; printf ( ” x = % f n “, x ) ; return 1 ; Để thực hiện thì tất cả họ lưu code xấp xỉ dạng tệp tin là main. C, tiếp nối thực thi gõ lệnh command sau trên ubuntuUSD export CFLAGS = ” – I. / include – DDEBUG – Wall – g ” USD export LDFLAGS + = ” – L. / lib – lm ” USD gcc – c main. C USD CFLAGS # tạo file object từ bỏ source USD gcc – o prog main. O USD LDFLAGS # chế tác file chương trình nhị phân từ tệp tin object USD. / prog # chạy chương trình

Kết quả

*

Giải thích

Trên đây là một format cơ bạn dạng nhất của GCCTrên đó là một format cơ bạn dạng nhất của GCC

CFLAGSC compiler flags đưa các options vào vào compiler nhằm thực hiện quy trình compile source code thành object sẽ bao hàm các thông tin:

Đường dẫn những header ban đầu với -I, lấy một ví dụ -I./includeCác define được bắt đầu với -D, lấy ví dụ như -DDEBUG để define DEBUGCác option quan trọng đặc biệt khác của compiler như -g nhằm bật chức năng debug gdb của gcc compiler, -wall nhằm trace các cảnh báo (warning) trong quy trình cĐường dẫn đầy đủ header tiên phong với – I, ví dụ – I. / includeCác define được mở màn với – D, ví dụ như – DDEBUG nhằm define DEBUGCác option đặc biệt quan trọng không giống của compiler như – g để bật công dụng debug gdb của gcc compiler, – wall để trace những cảnh báo nhắc nhở ( warning ) trong quá trình c

$ export CFLAGS=”-I./include -DDEBUG -Wall -g”LDFLAGS

Linker flags sử dụng trong tiến trình linking đa số thư viện, nó gồm bao gồm những tin tức :Đường mang tới thư viện, được bắt đầu bằng -L, lấy ví dụ -L./libCác thư viện bắt đầu với -l là viết tắt của lib, ví dụ: -lm khớp ứng với libm, tủ sách math tất cả sẵn trong hệ thốngĐường dẫn đến thư viện, được bắt đầu bằng – L, lấy ví dụ như – L. / libCác thư viện đứng đầu với – l là viết tắt của lib, ví dụ như : – lm tương ứng với libm, tủ sách math bao gồm sẵn trong màng lưới hệ thống

$ export LDFLAGS+=” -L./lib -lm”gcc : Complier mang đến C source với g++ là complier cho C++ source


Tiếp một ý hỗ trợ của anh MinatuCó một thông số kỹ thuật hơi quan tiền trọng. Đó là sysroot, tức là đường dẫn mang lại thư mục root (/).Khi tìm tệp tin header thời điểm compile thì gcc sẽ làm đường dẫn base nhằm tìm các file .h.Nó thường có 1 tập những thư mục mang định như /usr/local/include,.. để tìm kiếm những file stdio.h, string… khi đó, nó đã tìm trên phố dẫn đầy là sysroot/usr/local/include.Khi linking cũng thế, nếu đường truyền là /usr/lib thì mặt đường dẫn không hề thiếu khi tìm đã là sysroot/usr/lib.Nếu biên dịch native thì sysroot chính là /. Còn nếu áp dụng cross-compiler quánh thì đường dẫn này thường khác.Có thể hiển thị cái này bằng tham số –print-sysroot mang đến gcc. Bạn có thể thao tác đánh giá nhanh bởi lệnh gcc -print-sysrootCó thể thêm -v vào câu lệnh biên dịch để thấy đúng đắn các thông số của gcc. Ví như trong lấy một ví dụ trên ta thêm -v nghỉ ngơi lệnh demo$ gcc -c main.c $CFLAGS -v

Tạm kết

Có một thông số kỹ thuật hơi quan trọng. Đó là sysroot, có nghĩa là đường dẫn đến thư mục root ( / ). Khi tìm file header thời gian compile thì gcc vẫn làm băng thông base nhằm tìm phần nhiều file. H. Nó thường có một tập đều thư mục khoác định như / usr / local / include, .. để tìm kiếm các file stdio. H, string … khi đó, nó sẽ tìm trên đường dẫn đầy là sysroot / usr / local / include. Khi linking cũng thế, nếu đường truyền là / usr / lib thì con đường dẫn không thiếu khi tìm vẫn là sysroot / usr / lib. Nếu như biên dịch native thì sysroot đó là /. Còn nếu áp dụng cross-compiler sệt thì đường dẫn này thường khác. Hoàn toàn có thể hiển thị mẫu này bởi tham số – print-sysroot cho gcc. Chúng ta cũng có thể thao tác kiểm soát nhanh bằng lệnh gcc – print-sysrootCó thể thêm – v vào câu lệnh biên dịch giúp thấy đúng mực đa số tham số của gcc. Ví dụ như trong lấy một ví dụ trên ta thêm – v ngơi nghỉ lệnh kiểm tra USD gcc – c main. C USD CFLAGS – vThế là dứt được những cách cơ bạn dạng tiên phong với Crosscompiler, tò mò và khám phá được một ít ít về phương pháp để compile source. C đối kháng thuần. New trong bước đầu tiên làm quen nạm là đủ, hứa mọi bạn ở bài tiếp sau .