Compile 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ố tư tưởng cơ bạn dạng trong bài bác này nhé.Bạn đã xem: Compile là gì

Compiler

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

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

Quá trình biên dịch


*

Chúng ta có thể xem sơ đồ bỏ ra tiết công việc từ Code/Build/Run làm việc hình sau


*

Thông thường xuyên nếu cần sử dụng chương trình nhằm lập trình như Keil C chẳng hạn thì chỉ cần ấn một nút Build/Run chấm dứt là họ chỉ việc ngồi hóng và lịch trình được hấp thụ trực tiếp vào cpu luôn, tuy nhiên ẩn phía sau những nút này là 1 trong loạt chuyển động theo các bước như hình trên.

Cross Compiler/ Toolchain là gì ?

Cross Compiler hay nói một cách khác là Toolchain rất 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 khoản thời gian thông sang 1 cross compiler sẽ đã cho ra file nhị phân có khả năng chạy được bên trên một gốc rễ chip không giống là ARM. Một lấy ví dụ 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 nhằm build ra một file image 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ó liên quan tới 3 đối tượng

Build: hệ thống tạo ra tool chain, thường là các máy vi tính dùng cpu Intel cùng hệ quản lý Linux hoặc WindowsHost: hệ thống chạy tool chain để compile source code, host cũng tương tự như build hay là các máy tính xách tay dùng cpu Intel với Windows hoặc Linux là hệ điều hành.Target: là khối hệ thống chạy chương trình vị host chế tạo ra ra, hay target là các laptop nhúng dùng chip ARM, tuy vậy nó cũng rất có thể là một máy tính bình thường dùng cpu Intel.

Xem thêm: Cách Đăng Nhập Onedrive Trên Win 10 Để Lưu Trữ Dữ Liệu, Đồng Bộ Tệp Với Onedrive Trong Windows


*

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


*

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

Thông thường nhằm cross-compiler một chương trình ta phải thiết lập biến môi trường mới hoàn toàn 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 cấp các C API chuẩn để dễ dãi phát triển ứng dụng. Một số libb rất có thể kể mang đến như: glibc, uClibc, eglibc, dietlibc, newlib, …
Kernel headerCung cấp các API cần thiết cho Applications với C Library giao tiếp với Kernel.
GCC compilergcc, c++, g++ : compilerTrình biên dịch trong khối hệ thống Linux, compile cho rất nhiều ngôn ngữ và 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ỉ nói đế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, giúp sức cho quy trình phát hiện nay lỗi khi develop application.

Xem thêm: Sim Viettel Trả Sau Bị Khóa 2 Chiều, Cách Chặn 2 Chiều Sim Viettel Trả Sau

Ví dụ với GCC Compiler

Cài đặt GCC

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

Thực hiện kiểm tra version hiện bao 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 lấy một ví dụ cơ bản 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; Để thực hiện thì chúng ta lưu code trên dưới dạng tệp tin là main.c, sau đó 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 file object trường đoản cú source $ gcc -o prog main.o $LDFLAGS #tạo file chương trình 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 vào compiler nhằm 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 những header ban đầu với -I, ví dụ như -I./includeCác define được ban đầu với -D, ví dụ như -DDEBUG để define DEBUGCác option đặc biệt khác của compiler như -g để bật chức năng debug gdb của gcc compiler, -wall nhằm 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 bước đầu bằng -L, lấy một ví dụ -L./libCác thư viện bước đầu với -l là viết tắt của lib, ví dụ: -lm tương ứng với libm, thư viện math tất cả sẵn trong hệ thống

$ export LDFLAGS+=" -L./lib -lm"gcc : Complier mang lại C source với g++ là complier cho 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 cho thư mục root (/).Khi tìm tệp tin header lúc compile thì gcc sẽ làm đường truyền base nhằm tìm những file .h.Nó thường có 1 tập những thư mục mang định như /usr/local/include,.. để tìm kiếm các file stdio.h, string… khi đó, nó vẫn tìm trên phố dẫn đầy là sysroot/usr/local/include.Khi linking cũng thế, nếu đường dẫn là /usr/lib thì mặt đường dẫn đầy đủ khi tìm đang 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 đặc thì đường truyền này thường xuyên khác.Có thể hiển thị loại này bởi tham số –print-sysroot mang đến gcc. Chúng ta cũng có thể thao tác đánh giá nhanh bằng lệnh gcc -print-sysrootCó thể thêm -v vào câu lệnh biên dịch nhằm thấy đúng chuẩn các thông số của gcc. Ví như trong ví dụ như trên ta thêm -v ở lệnh demo$ gcc -c main.c $CFLAGS -v

Tạm kết

Thế là chấm dứt được những cách cơ bạn dạng đầu tiên với Crosscompiler, tìm hiểu được một chút ít về phương pháp để compile source .c đối kháng giản. Mới những bước đầu làm quen nuốm là đủ, hứa hẹn mọi người ở bài bác tiếp theo.