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ì ?

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, …


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 GCCCFLAGSC 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 -vTạ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.