COMPILER LÀ GÌ

     

Compiler là gì ? Cross Compiler là gì ? Nó có liên quan gì tới một hệ thống nhúng ? mình cùng khám phá một số khái niệm cơ bạn dạng trong bài xích này nhé.

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

Compiler

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

Quá trình biên dịch

*

Chúng ta hoàn toàn có thể xem sơ đồ đưa ra tiết công việc từ Code/Build/Run sinh hoạt hình sau

*

Thông hay 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 là họ chỉ câu hỏi ngồi chờ và chương trình được hấp thụ trực tiếp vào cpu luôn, nhưng mà ẩn đằng sau những nút này là một trong loạt hoạt động theo các bước như hình trên.

Cross Compiler/ Toolchain là gì ?

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

*

Qúa trình tạo nên và thực hiện 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 là các máy tính xách tay dùng chip Intel cùng hệ quản lý và điều hành Linux hoặc WindowsHost: khối hệ thống chạy tool chain nhằm compile source code, host cũng giống như build thường là các máy tính dùng cpu Intel và Windows hoặc Linux là hệ điều hành.

Xem thêm: Top 9 Vỏ Bánh Mì Hamburger Mua Ở Đâu ? Vỏ Bánh Mì Hamburger Mua Ở Đâu

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

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

*
Binutils: là một trong những tập các công gắng để tạo nên và thống trị file nhị phân (bin) của target CPUas : là assembler, nó ra đời 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: đối chiếu file nhị phânstrip : để loại trừ những phần thừa trong tệp tin nhị phân nhằm giảm kích thước của chúng

Thông thường để cross-compiler một chương trình ta phải thiết lập biến môi trường xung quanh 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 dùng làm interface giữa applications và kernel, cung cấp các C API chuẩn để dễ dãi phát triển ứng dụng. Một số trong những libb có thể kể mang lại 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 hệ thống Linux, compile cho không hề ít ngôn ngữ với nhiều phong cách xây dựng CPU khác biệt như ARM, MIPS, PowerPC, SuperH, x86; tuy vậy mình chỉ đề cập đến ngữ điệu C/C++ và kiến trúc CPU là ARM với x86.GDB Debugger: Trình gỡ rối, giúp đỡ cho quy trình phát hiện lỗi lúc develop application.

Xem thêm: Mua Máy Hút Chân Không Ở Đâu Tphcm, Cửa Hàng Bán Máy Hút Chân Không Hồ Chí Minh

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

Cài để GCC

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

Thực hiện check version hiện gồm của gcc/g++ và sở hữu đặt

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

Ví dụ

Xét một ví dụ cơ bạn dạng 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 ", x); return 1; Để triển khai thì bọn họ lưu code xấp xỉ dạng tệp tin là main.c, kế tiếp thực hiện tại gõ lệnh command sau 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ừ bỏ source $ gcc -o prog main.o $LDFLAGS #tạo file công tác nhị phân từ file object $ ./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 GCC

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

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

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

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

Đường mang tới thư viện, được bắt đầu bằng -L, ví dụ như -L./libCác thư viện bước đầ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 có sẵn vào hệ thống

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

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

Có một thông số hơi quan lại trọng. Đó là sysroot, có nghĩa là đường dẫn mang đến thư mục root (/).Khi tìm tệp tin header thời gian compile thì gcc đang làm băng thông base nhằm tìm các file .h.Nó thường có 1 tập các thư mục khoác định như /usr/local/include,.. Nhằm tìm kiếm các file stdio.h, string… lúc đó, nó đang tìm trên phố dẫn đầy là sysroot/usr/local/include.Khi linking cũng thế, nếu băng thông là /usr/lib thì đường dẫn không 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 sệt thì đường dẫn này thường xuyên khác.Có thể hiển thị mẫu này bằng tham số –print-sysroot mang đến gcc. Bạn có thể thao tác chất vấn 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 tham số của gcc. Ví như trong lấy ví dụ như trên ta thêm -v sống lệnh demo$ gcc -c main.c $CFLAGS -v

Tạm kết

Thế là dứt được những bước cơ 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 đơn giản. Mới những bước đầu tiên làm quen vậy là đủ, hứa hẹn mọi bạn ở bài xích tiếp theo.