Compiler Là Gì

     

Compiler là gì ? Cross Compiler là gì ? Nó bao gồm liên quan gì tới một hệ thống nhúng ? Mình cùng tò mò một số quan niệm cơ bạn dạng trong bài bác này nhé.You watching: Compile là gì

Compiler

Compiler tuyệt còn gọi 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 xuất phát điểm từ một ngôn ngữ lập trình sẵn thành chương trình tương đương dưới dạng ngôn ngữ máy tính xách tay, hay là ngôn ngữ ở cấp thấp rộng, ngôn ngữ trang bị. Đơn giản dễ hiểu thì rất có thể tạm bợ nói là nhờ Complier này mà file .c họ viết new được dịch thành tệp tin .hex .bin nhằm nạp được xuống một MCU ngẫu nhiên.

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

Đang xem: Compiler là gì

Quá trình biên dịch

*
*
*
*

Binutils: Là một tập những pháp luật để tạo ra cùng thống trị file nhị phân (bin) của target CPUas : là assembler, nó xuất hiện mã nhị phân (binary code) tự assembler source codeld : trình links (linker)ar, ranlib : có mặt file nén .a, sử dụng như là thỏng việnobjdump, readelf, form size, nm, strings: đối chiếu file nhị phânstrip : để vứt bỏ đông đảo phần thừa trong file nhị phân nhằm bớt kích cỡ của chúng

Thông thường nhằm cross-compiler một lịch trình ta đề nghị cài đặt phát triển thành môi trường bắt đầu 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 cho interface thân applications với kernel, hỗ trợ những C API chuẩn để dễ dãi cải tiến và phát triển áp dụng. Một số libb có thể kể tới như: glibc, uClibc, eglibc, dietlibc, newlib, …Kernel headerCung cấp cho các API quan trọng đến Applications cùng C Library giao tiếp cùng với Kernel.

GCC compilergcc, c++, g++ : compilerTrình biên dịch trong khối hệ thống Linux, compile đến không ít ngữ điệu và những 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ỉ đề cập tới ngôn từ C/C++ cùng bản vẽ xây dựng CPU là ARM và x86.GDB Debugger: Trình tháo gỡ, trợ giúp cho quy trình phân phát hiện tại lỗi Lúc develop application.See more: Nghĩa Của Từ Pump Là Gì ? Nghĩa Của Từ Pump Trong Tiếng Việt

Ví dụ với GCC Compiler

Cài đặt GCC

Trước hết, mình triển khai các bước cùng với GCC trên máy vi tính cần sử dụng Ubuntu nhé

Thực hiện kiểm tra version hiện tất cả của gcc/g++ với thiết lập đặt

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

Ví dụ

Xét một ví dụ cơ bản cùng với lịch trình C tính căn uố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; Để thực hiện thì bọn họ lưu lại code trên dưới dạng file là main.c, tiếp đến tiến hành 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 #sinh sản tệp tin object từ bỏ source $ gcc -o prog main.o $LDFLAGS #tạo nên tệp tin công tác nhị phân từ tệp tin object $ ./prog #chạy chương thơm trình

Kết quả

Giải thích

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

CFLAGSC compiler flags gửi những options vào vào compiler nhằm triển khai quy trình compile source code thành object vẫn bao hàm các thông tin:

Đường dẫn các 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 đặc biệt quan trọng không giống của compiler nlỗi -g nhằm bật công dụng debug gdb của gcc compiler, -wall để trace những lưu ý (warning) trong quy 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 thư viện, nó bao gồm những thông tin:

Đường mang đến thỏng viện, được bước đầu bằng -L, ví dụ -L./libCác thỏng viện bước đầu cùng 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 trong hệ thống

$ export LDFLAGS+=” -L./lib -lm”gcc : Complier mang lại C source cùng g++ là complier cho C++ source

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

Có một thông số tương đối quan trọng. Đó là sysroot, tức là đường dẫn mang lại thỏng mục root (/).Lúc tìm kiếm tệp tin header dịp compile thì gcc vẫn có tác dụng đường dẫn base để tìm những file .h.Nó thường xuyên có một tập những tlỗi mục mặc định nlỗi /usr/local/include,..

Xem thêm: Top 7 Loại Cây Trồng Cây Gì, Trồng Cây Gì Lợi Nhuận Cao Nhất Hiện Nay



Xem thêm: Phân Biệt " Học Vị Là Gì - Sự Khác Nhau Giữa Học Hàm Và Học Vị

nhằm tra cứu tìm các file stdio.h, string… lúc ấy, nó đã kiếm tìm trên tuyến đường dẫn đầy là sysroot/usr/local/include.lúc linking cũng thế, trường hợp đường dẫn là /usr/lib thì đường truyền vừa đủ Khi tìm vẫn là sysroot/usr/lib.Nếu biên dịch native thì sysroot chính là /. Còn nếu sử dụng cross-compiler quánh thì đường truyền này hay khác.Có thể hiển thị tính năng này bằng tsay mê số –print-sysroot cho gcc. Quý khách hàng hoàn toàn có thể thao tác làm việc bình chọn nhanh hao bằng lệnh gcc -print-sysrootCó thể thêm -v vào câu lệnh biên dịch giúp xem chính xác các tmê say số của gcc. lấy ví dụ nlỗi vào ví dụ bên trên ta thêm -v ở lệnh demo$ gcc -c main.c $CFLAGS -v

Tạm kết

Thế là hoàn thành được số đông bước cơ bạn dạng trước tiên cùng với Crosscompiler, mày mò được một ít về cách để compile source .c dễ dàng và đơn giản. Mới bước đầu tiên làm thân quen núm là đủ, hứa hẹn những bạn làm việc bài bác tiếp theo.