Một điều tôi thực sự không hiểu là về chức năng của clang, nếu clang là phần kết thúc trước của trình biên dịch, nó chỉ nên làm việc phân tích cú pháp cho mã nguồn, công việc vẫn sẽ được thực hiện bởi LLVM. Nhưng clang cũng có thể tạo ra file thực thi. Vậy làm thế nào để hiểu nó? Mối quan hệ giữa clang và llvm là gì?Nếu clang là phần đầu của trình biên dịch, thì tại sao nó có thể tạo ra tệp thực thi?
Trả lời
Nếu bạn rất cụ thể: khả năng thực thi của trình điều khiển là trình điều khiển trình biên dịch. Nó gọi tất cả các phần cần thiết để tạo ra một tệp thực thi. Nó gọi libclang làm công việc front-end: parser/lexer, phân tích ngữ nghĩa, xây dựng AST và tạo mã. Khi AST được hạ xuống LLVM IR, công việc front-end được thực hiện và trình tối ưu hóa và LLVM sẽ khởi động. Sau khi mã hóa trình điều khiển trình biên dịch sẽ gọi ra back-end LLVM được chỉ định bởi đích và cuối cùng là trình liên kết xây dựng tệp thực thi. Và đó là lý do tại sao trình điều khiển trình biên dịch clang có thể xây dựng các tệp thi hành.
LLVM là một trình phụ trợ trình biên dịch được viết trước khi clang, ban đầu sử dụng giao diện người dùng từ gcc trong công cụ có tên 'llvm-gcc'. Clang là tên của mã giao diện người dùng, nhưng clang cũng là tên của một công cụ bao gồm cả giao diện người dùng, nhưng cũng sẽ chạy toàn bộ biên dịch cho bạn. Các giai đoạn biên dịch sau này được xây dựng trong công cụ clang như các thư viện, hoặc nếu chúng là các tập tin thực thi riêng biệt, clang biết cách gọi chúng. Với các đối số dòng lệnh đúng, bạn có thể làm cho vang dừng phần cách thru
- -emit-ast chỉ làm phân tích cú pháp và làm cho các cú pháp trừu tượng Tree
- -emit-llvm làm cho Trung cấp Đại diện LLVM, nhưng không biến nó thành mã cho máy tính của bạn
Clang sẽ hoạt động như trình điều khiển cho toàn bộ công trình vì đó là những gì người lập trình thường muốn, phân tích cú pháp, đối tượng được tạo, thực thi. Muốn cây cú pháp trừu tượng nhổ vào bạn thì khá hiếm.
Rõ ràng đây là souce cho tất cả các điều LLVM http://llvm.org
Dưới đây là một đoạn video của Chriss Lattner explaing gì LLVM là https://www.youtube.com/watch?v=029YXzHtRy0. Chandler Carruth có một số vids trên Youtuble giải thích các phần của tiếng kêu vang mà ông đã làm việc.
Có 3 ý nghĩa của Clang:
- Các front-end (libclang)
- Trình biên dịch lái xe (kêu vang thực thi)
- Các truyền thống biên dịch. Điều này không chỉ bao gồm front-end, mà còn sử dụng rộng rãi của trung cấp và back-end, hoặc thậm chí là assembler tích hợp để hoàn thành giai đoạn biên dịch. (trình điều khiển chủ yếu bao gồm biên soạn và liên kết)
- 1. Tại sao trình biên dịch Rust tạo ra các tệp thực thi khổng lồ?
- 2. Tại sao chuyên môn mẫu của tôi được biên dịch nếu nó không được thực thi?
- 3. Tại sao tạo DLL thay vì biên dịch mọi thứ thành một tệp thực thi lớn?
- 4. Tại sao trình biên dịch tạo ra assembly này?
- 5. Trình biên dịch sẽ chỉ biên dịch mã có thể được thực thi?
- 6. Trong cmake, làm thế nào tôi có thể kiểm tra nếu trình biên dịch là Clang?
- 7. Tại sao một sự kiện không thể đăng ký khi nó là một phần của tệp phần 3 trong ASP.NET?
- 8. Nhận các tùy chọn trình biên dịch từ tệp thực thi đã biên dịch?
- 9. Tại sao việc triển khai Python và thực thi Java của MSER của OpenCV tạo ra đầu ra khác nhau?
- 10. clang-3.8 và trình biên dịch-rt vs libgcc
- 11. Tại sao đây là đầu ra của chương trình?
- 12. Nếu javac được viết bằng Java, tại sao tôi có thể thực thi javac như thể nó là một chương trình không java?
- 13. thực thi được tạo ra với kêu vang ++ đi điên
- 14. Cách thay đổi vị trí tệp đầu ra của trình biên dịch Nim và đặt tên
- 15. Tại sao BIGENDIAN là chỉ thị nếu nó không được giải quyết tại thời điểm biên dịch?
- 16. Bạn có thể tìm ra trình biên dịch nào được sử dụng để biên dịch chương trình không?
- 17. Có an toàn để biên dịch lại tệp thi hành trong khi nó đang chạy không?
- 18. Tại sao trình biên dịch tạo thêm sqrts trong mã assembly được biên dịch
- 19. Tại sao chương trình của tôi không thể xóa các tệp mà nó tạo ra trong Win7?
- 20. Cách biên dịch clang thành llvm IR
- 21. Tại sao #region tạo lỗi biên dịch?
- 22. Trình biên dịch C không thể tạo tệp thi hành - Cygwin/MiniGW
- 23. Tại sao trình cài đặt python của tôi được tạo có thể thực thi yêu cầu quyền quản trị?
- 24. Nếu hệ thống s = null thì đầu ra của bên dưới là
- 25. Điều gì có thể khiến trình biên dịch không tạo ra đầu ra giao diện điều khiển
- 26. Biên dịch lại RTL - nếu có thể, thì làm cách nào?
- 27. Tại sao trình biên dịch tạo mã này?
- 28. Tại sao tệp đối tượng cần thiết để tạo tệp thực thi?
- 29. Kivy: biên dịch thành một tệp thực thi duy nhất
- 30. Tại sao trình biên dịch suy ra var là động thay vì loại bê tông?
sự khác biệt giữa LLVM IR và LLVM là gì? – storen
LLVM IR là đại diện trung gian mà các mặt trước sản xuất và back-end biến đổi thành một ISA riêng biệt. LLVM chỉ là tên của dự án. –