COMPILER LÀ GÌ

  -  

Compiler là gì ? Cross Compiler là gì ? Nó có liên quan gì cho tới một hệ thống nhúng ? Mình thuộc mày mò một số tư tưởng cơ bạn dạng trong bài xích này nhé.

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

Compiler

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

Quá trình biên dịch

*

Chúng ta có thể xem sơ thứ cụ thể công việc trường đoản cú Code/Build/Run sinh sống hình sau

*

Đôi khi trường hợp dùng lịch trình để xây dựng như Keil C chẳng hạn thì chỉ cần ấn một nút ít Build/Run xong là bọn họ chỉ câu hỏi ngồi đợi với chương trình được nạp trực tiếp vào chip luôn, mà lại ẩn ẩn dưới số đông nút ít này là một trong những loạt chuyển động theo các bước nhỏng hình trên.

Cross Compiler/ Toolchain là gì ?

Cross Compiler xuất xắc còn được gọi là Toolchain có thể được gọi là một trong những source code được viết trên máy vi tính chạy xe trên chip Hãng sản xuất Intel, sau thời điểm thông sang một cross compiler đã tạo ra tệp tin nhị phân có công dụng chạy được trên một nền tảng gốc rễ chip khác là ARM. Một ví dụ cơ phiên bản độc nhất vô nhị là tôi đã dùng một máy vi tính hệ điều hành Ubuntu để build ra một file image rất có thể điều khiển xe trên Raspberry Pi

*

Qúa trình tạo nên cùng sử dụng cross compiler/ tool chain gồm tương quan cho tới 3 đối tượng

Build: khối hệ thống tạo nên tool chain, hay là các máy tính xách tay cần sử dụng chip Hãng Intel với hệ điều hành quản lý Linux hoặc WindowsHost: hệ thống chạy tool chain nhằm compile source code, host cũng tương tự build thường xuyên là những máy vi tính dùng chip Hãng sản xuất Intel với Windows hoặc Linux là hệ điều hành và quản lý.

Xem thêm: Bảng Ngọc Yasuo Mùa 9 Chuẩn Xác Nhất, Cách Chơi, Lên Đồ,

Target: là hệ thống chạy chương trình vì host tạo thành, thường xuyên target là các máy tính xách tay nhúng cần sử dụng chip ARM, tuy vậy nó cũng rất có thể là 1 trong máy vi tính thông thường sử dụng chip Intel.
*

Vậy các yếu tắc của Cross Compiler là gì ?

*
Binutils: Là một tập các nguyên tắc để tạo thành cùng làm chủ tệp tin nhị phân (bin) của target CPUas : là assembler, nó hiện ra mã nhị phân (binary code) từ bỏ assembler source codeld : trình links (linker)ar, ranlib : ra đời file nén .a, áp dụng như thể thỏng việnobjdump, readelf, form size, nm, strings: phân tích tệp tin nhị phânstrip : nhằm loại bỏ phần đa phần vượt vào tệp tin nhị phân nhằm sút form size của chúng

Đôi khi nhằm cross-compiler một lịch trình ta cần thiết đặt biến đổi môi trường thiên nhiên new 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 có tác dụng interface giữa applications với kernel, cung ứng những C API chuẩn nhằm dễ ợt cách tân và phát triển vận dụng. Một số libb rất có thể nói đến như: glibc, uClibc, eglibc, dietlibc, newlib, …

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

Xem thêm: Hướng Dẫn Tải Cài Đặt & Cách Tải Và Chơi Game 3Q Bá Vương Bản Trung Quốc Trên

lấy ví dụ như với GCC Compiler

Cài đặt GCC

Trước không còn, mình thực hiện công việc cùng với GCC trên máy tính cần sử dụng Ubuntu nhé

Thực hiện tại kiểm tra version hiện gồm của gcc/g++ và download đặt

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

Ví dụ

Xét một ví dụ cơ bản với chương trình C tính cnạp năng lượng bậc 2 của 4 nlỗi sau

#include #include int main(int argc, char **argv) double x; x = sqrt(4); printf("x = %f ", x); return 1; Để triển khai thì chúng ta lưu giữ code xấp xỉ dạng file là main.c, tiếp đến triển khai gõ lệnh comm& sau bên trên ubuntu

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

Kết quả

*

Giải thích

Trên đây là một format cơ bản độc nhất vô nhị của GCC

CFLAGSC compiler flags gửi những options vào trong compiler nhằm thực hiện quá trình compile source code thành object vẫn bao hàm những thông tin:

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

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

Linker flags cần sử dụng vào quá trình linking những tlỗi viện, nó bao gồm những thông tin:

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

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

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

Có một thông số kỹ thuật khá quan trọng đặc biệt. Đó là sysroot, có nghĩa là đường dẫn đến tlỗi mục root (/).lúc kiếm tìm file header lúc compile thì gcc sẽ làm đường truyền base nhằm kiếm tìm các tệp tin .h.Nó thường có một tập những tlỗi mục mặc định nhỏng /usr/local/include,.. để kiếm tìm kiếm những tệp tin stdio.h, string… lúc ấy, nó đã tìm kiếm trên phố dẫn đầy là sysroot/usr/local/include.Khi linking cũng vậy, ví như băng thông là /usr/lib thì băng thông đầy đủ Lúc tìm sẽ là sysroot/usr/lib.Nếu biên dịch native sầu thì sysroot chính là /. Còn giả dụ thực hiện cross-compiler sệt thì đường truyền này thường xuyên không giống.cũng có thể hiển thị điều này bởi tđam mê số –print-sysroot mang đến gcc. Quý Khách hoàn toàn có thể làm việc chất vấn nkhô giòn bởi lệnh gcc -print-sysrootcũng có thể thêm -v vào câu lệnh biên dịch giúp xem đúng mực các tham số của gcc. lấy ví dụ như trong ví dụ trên ta thêm -v ngơi nghỉ lệnh demo$ gcc -c main.c $CFLAGS -v

Tạm kết

Thế là hoàn thành được rất nhiều bước cơ bản đầu tiên với Crosscompiler, tò mò được một chút về phương pháp để compile source .c đơn giản. Mới bước đầu tiên làm cho quen thuộc nạm là đủ, hứa số đông tín đồ ở bài tiếp theo.