Trình Biên Dịch Là Gì

  -  

Compiler là gì ? Cross Compiler là gì ? Nó có tương quan gì tới một hệ thống nhúng ? bản thân cùng khám phá một số khái niệm cơ bản trong bài bác này nhé.

Bạn đang xem: Trình biên dịch là gì

Compiler

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

Quá trình biên dịch

*

Chúng ta rất có thể xem sơ đồ đưa ra tiết công việc từ Code/Build/Run ở hình sau

*

Thông thường xuyên nếu dùng chương trình để lập trình như Keil C chẳng hạn thì chỉ việc ấn một nút Build/Run kết thúc là chúng ta chỉ việc ngồi ngóng và chương trình được nạp trực tiếp vào cpu luôn, tuy vậy ẩn ẩn dưới những nút này là 1 loạt hoạt động theo quá trình như hình trên.

Cross Compiler/ Toolchain là gì ?

Cross Compiler hay nói một cách khác là Toolchain hoàn toàn có thể được hiểu là một trong những source code được viết trên máy tính chạy trên chip Intel, sau khi thông qua một cross compiler sẽ cho ra file nhị phân có chức năng chạy được bên trên một nền tảng chip không giống là ARM. Một ví dụ như cơ bản nhất là tôi đã dùng một máy tính hệ điều hành quản lý Ubuntu để build ra một tệp tin image rất có thể chạy trên Raspberry Pi

*

Qúa trình tạo ra và sử dụng cross compiler/ tool chain có tương quan tới 3 đối tượng

Build: khối hệ thống tạo ra tool chain, thường xuyên là các máy vi tính dùng cpu Intel cùng hệ điều hành Linux hoặc WindowsHost: hệ thống chạy tool chain để compile source code, host cũng giống như build thường xuyên là các máy vi tính dùng cpu Intel với Windows hoặc Linux là hệ điều hành.

Xem thêm: Cm Hay Nhất Fifa Online 3 New Engine, Cdm Tốt Nhất Fo3 New Engine, Được Yêu

Target: là khối hệ thống chạy chương trình vị host chế tạo ra ra, thường target là các máy vi tính nhúng sử dụng chip ARM, tuy vậy nó cũng rất có thể là một lắp thêm tính bình thường dùng chip Intel.
*

Vậy những thành phần của Cross Compiler là gì ?

*
Binutils: là một trong những tập những công rứa để tạo nên và làm chủ file nhị phân (bin) của target CPUas : là assembler, nó hiện ra mã nhị phân (binary code) trường đoản cú assembler source codeld : trình link (linker)ar, ranlib : có mặt file nén .a, sử dụng như là thư việnobjdump, readelf, size, nm, strings: so sánh file nhị phânstrip : để sa thải những phần quá trong tệp tin nhị phân nhằm giảm kích cỡ của chúng

Thông thường để cross-compiler một chương trình ta phải thiết đặt biến môi trường mới 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 giữa applications với kernel, cung ứng các C API chuẩn chỉnh để tiện lợi phát triển ứng dụng. Một trong những libb hoàn toàn có thể kể cho như: glibc, uClibc, eglibc, dietlibc, newlib, …

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

Xem thêm: Tải Game The Legend Of Zelda Breath Of The Wild Full Crack Pc

Ví dụ với GCC Compiler

Cài để GCC

Trước hết, bản thân thực hiện các bước với GCC trên laptop dùng Ubuntu nhé

Thực hiện kiểm tra version hiện bao gồm của gcc/g++ và thiết lập đặt

$ gcc --version$ g++ --version$ sudo apt-get install gcc g++

Ví dụ

Xét một ví dụ như cơ bạn dạng với công tác 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 ", x); return 1; Để tiến hành thì họ lưu code xấp xỉ dạng tệp tin là main.c, tiếp đến thực hiện gõ lệnh command sau bên trên ubuntu

$ export CFLAGS="-I./include -DDEBUG -Wall -g" $ export LDFLAGS+=" -L./lib -lm" $ gcc -c main.c $CFLAGS #tạo tệp tin object tự source $ gcc -o prog main.o $LDFLAGS #tạo file công tác nhị phân từ tệp tin object $ ./prog #chạy chương trình

Kết quả

*

Giải thích

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

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

Đường dẫn các header bước đầu với -I, lấy ví dụ -I./includeCác define được bắt đầu với -D, lấy một ví dụ -DDEBUG để define DEBUGCác option đặc trưng khác của compiler như -g để bật tác dụng debug gdb của gcc compiler, -wall để trace các cảnh báo (warning) trong quá trình c

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

Linker flags cần sử dụng trong quá trình linking những thư viện, nó bao hàm các thông tin:

Đường dẫn đến thư viện, được ban đầu bằng -L, ví dụ như -L./libCác thư viện ban đầu với -l là viết tắt của lib, ví dụ: -lm khớp ứng với libm, thư viện math có sẵn vào hệ thống

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

Tiếp một ý bổ sung cập nhật của anh Minatu

Có một thông số kỹ thuật hơi quan liêu trọng. Đó là sysroot, tức là đường dẫn mang lại thư mục root (/).Khi tìm tệp tin header lúc compile thì gcc đang làm đường truyền base nhằm tìm những file .h.Nó thường có một tập các thư mục mặc định như /usr/local/include,.. Nhằm tìm kiếm những file stdio.h, string… khi đó, nó đã tìm trê tuyến phố dẫn đầy là sysroot/usr/local/include.Khi linking cũng thế, nếu đường truyền là /usr/lib thì đường dẫn không thiếu khi tìm sẽ là sysroot/usr/lib.Nếu biên dịch native thì sysroot đó là /. Còn nếu áp dụng cross-compiler đặc thì băng thông này thường xuyên khác.Có thể hiển thị chiếc này bởi tham số –print-sysroot mang lại gcc. Chúng ta có thể thao tác kiểm soát 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 mực các tham số của gcc. Ví như trong lấy một ví dụ trên ta thêm -v làm việc lệnh demo$ gcc -c main.c $CFLAGS -v

Tạm kết

Thế là dứt được những cách cơ phiên bản đầu tiên với Crosscompiler, tìm hiểu được một chút ít về phương pháp để compile source .c 1-1 giản. Mới những bước đầu tiên làm quen nắm là đủ, hẹn mọi fan ở bài xích tiếp theo.