30/09/2018, 23:08

[Thắc mắc] Cách biên dịch 1 chương trình c++ trong linux

Chào mọi người , em đang tìm hiểu 1 chương trình viết bằng c trong linux, chương trình có nhiều file header , nhiều file cpp (trong đó có duy nhất 1 file cpp có hàm main ) ,1 file make file.
Khi em thực hiện lệnh make sẽ tạo ra rất nhiều output và 1 file execute.
Khi em thực hiện file excute chương trình hoạt động.
Em không hiểu quá trình biên dịch sẽ diễn ra cụ thể như thế nào .
Mong mọi người giải đáp giúp em vấn đề này.
Em xin chân thành cảm ơn.

Tao Không Ngu. viết 01:15 ngày 01/10/2018

This post was flagged by the community and is temporarily hidden.

nohat viết 01:13 ngày 01/10/2018

trình tự xử lý mã nguồn c++:

  1. Preprocessing: nôm na là đem mã nguồn từ các file được #include đặt vào chỗ đó, thay thế các macro được #define, sau quá trình này, mỗi file .cpp trở thành các mã c++ thuần khiết, không chứa bất kỳ chỉ thị tiền xử lý nào nữa, và mỗi file này có thể được dịch đôc lập ở bước sau.
  2. Compilation:
    các file mã nguốn sau khi trải qua preprocessing được 1 chương trình gọi là assembler chuyển thành các mã assembly, tiếp đó được dịch sang mã máy, và lưu thành các file .o (object file). Ứng với mỗi file .cpp sẽ có 1 file .o
  3. Linking
    Các file object độc lập được linker xử lý, có thể tạo thành file thực thi, dynamic library hoặc static library.

Nếu dùng GCC, bạn có thể thêm các tham số vào lệnh gọi trình biên dịch để dừng lại ở bước nào đó, để xem kết quả của quá trình đó là gì. Ví dụ
g++ source.cpp -E > ketqua.txt
tham số -E nói với g++ rằng chỉ dừng lại ở tiền xử lý thôi, không tiến hành các quá trình tiếp theo, và lưu kết quả vào file ketqua.txt để tao xem. Sau đấy mở file ketqua.txt xem thu được cái gì.
Một số tham số khác để tìm hiểu cái này như:
-S : compile only, not assemble or link
-c : compile and assemble, but do not link

viết 01:09 ngày 01/10/2018

Có make file rồi thì bạn mở lên đọc hiểu make file sẽ biết thứ tự biên dịch của nó như thế nào

Bài liên quan
0