2011-12-28 28 views
5

Làm thế nào để tạo một tệp nhị phân thực thi từ phía C++ của LLVM?thế hệ nhị phân từ LLVM

Tôi hiện đang viết trình biên dịch đồ chơi và tôi không chắc chắn cách thực hiện bước cuối cùng để tạo tệp thực thi từ IR.

Giải pháp duy nhất tôi hiện đang xem là viết ra bitcode và sau đó gọi llc bằng cách sử dụng system hoặc tương tự. Có cách nào để làm điều này từ giao diện C++ thay thế?

Điều này có vẻ như đó sẽ là một câu hỏi phổ biến, nhưng tôi không thể tìm thấy bất kỳ điều gì trên đó.

Trả lời

3

LLVM không gửi liên kết cần thiết để thực hiện tác vụ này. Nó chỉ có thể viết ra như là trình biên dịch và sau đó gọi trình liên kết hệ thống để xử lý nó. Bạn có thể xem mã nguồn của llvm-ld để xem mã nguồn được thực hiện như thế nào.

+0

Cảm ơn, mã llvm-ld chính xác là những gì tôi cần. – cobbal

+1

Nếu bạn đọc tài liệu của llvm-ld, nó nói rằng đầu ra của nó vẫn là bytecode, không phải là tệp nhị phân gốc. Bytecode nó kết quả đầu ra thực sự được liên kết theo nghĩa là tất cả các đầu vào đều có mặt trong đầu ra. Để hoạt động như một giọt thay thế cho ld, llvm-ld phải tạo ra tệp a.out thông thường, nhưng nó cũng không phải là tệp thực thi gốc. Nó là một kịch bản lệnh shell, nó gọi tiện ích lli của LLVM, sau đó thực hiện bytecode (hoặc thông qua trình thông dịch của nó hoặc thông qua trình biên dịch JIT). Nếu bạn thực sự muốn thực thi, cuối cùng bạn phải biên dịch LLVM IR hoặc bytecode của bạn thành assembly và chạy nó thông qua gcc. – mgadda

Các vấn đề liên quan