Bạn có thể sử dụng clang làm thư viện để thực hiện biên dịch JIT như đã nêu trong các câu trả lời khác. Sau đó, bạn phải tải lên mô-đun đã biên dịch (ví dụ, một thư viện .so). Để thực hiện điều này, bạn có thể sử dụng dlopen chuẩn (unix) hoặc LoadLibrary (windows) để tải nó, sau đó sử dụng dlsym (unix) để tham chiếu động các hàm đã biên dịch, nói một hàm "main"() giống như có tên được biết đến. Lưu ý rằng đối với C++ bạn sẽ phải sử dụng các ký hiệu bị xáo trộn. Một giải pháp thay thế di động là ví dụ: GNU libltdl. Thay vào đó, "tập lệnh" có thể chạy tự động tại thời điểm tải bằng cách thực hiện các hàm init module hoặc đặt một số mã tĩnh (hàm tạo của đối tượng được xác định trên toàn cầu C++ sẽ được gọi ngay lập tức).
Mô-đun được nạp có thể gọi trực tiếp bất kỳ thứ gì trong ứng dụng chính. Tất nhiên các ký hiệu được biết đến tại thời gian biên dịch bằng cách sử dụng các tệp tiêu đề của ứng dụng chính thích hợp.
Nếu bạn muốn dễ dàng thêm C++ "vào chương trình của bạn, và biết giao diện thành phần ưu tiên (nói ứng dụng chính của bạn biết tên và giao diện của một lớp đã tải từ .h trước khi mô-đun được tải trong bộ nhớ), sau khi bạn tự động tải thư viện, lớp có sẵn để được sử dụng như thể nó được liên kết tĩnh. Chỉ cần chắc chắn rằng bạn không cố gắng để khởi tạo một đối tượng của lớp trước khi bạn dlopen() module của nó.
Sử dụng mã tĩnh cũng cho phép thực hiện các cơ chế đăng ký plugin tự động tốt đẹp.
Cảm ơn bạn. Nó đã cho tôi khá một thời gian để có được nó và chạy - về cơ bản vì tôi đã không tìm thấy thực thi :) Bây giờ sau khi nhìn vào nó tôi muốn nói nó là một nửa chiều ở đó. Bây giờ tôi cần tìm ra cách gọi các hàm được định nghĩa trong phần không được ghi. ... bất kỳ ý tưởng nào về điều đó? – FFox
Tôi không chắc chắn ý của bạn là gì. Bạn sẽ có thể nhận được một con trỏ tới bất kỳ hàm nào mà bạn đã biên dịch. Có lẽ hướng dẫn LLVM nói chung này sẽ hữu ích: http://llvm.org/docs/tutorial/ (chương 4, đặc biệt). Tôi không nghĩ rằng bạn sẽ có thể sử dụng thông dịch viên như nó, nhưng nó sẽ cung cấp cho bạn một ý tưởng về cách nhúng một trình thông dịch C/C++ vào ứng dụng của bạn. (Tôi thậm chí không sử dụng nó bản thân mình, tôi chỉ nhớ nhìn thấy nó.) –
Ok đây là những gì tôi đã làm: http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-July/009836.html ... và nó thực sự làm việc với sự giúp đỡ của những người tốt đẹp từ danh sách gửi thư của cfe-dev. Tại sao bạn nghĩ rằng thông dịch viên này không thể được sử dụng trong một ứng dụng? – FFox