簡體   English   中英

從C ++中的嵌入式LLVM生成二進制代碼(共享庫)

[英]Generate binary code (shared library) from embedded LLVM in C++

我正在研究用C ++編寫的高性能系統。 該過程需要能夠在運行時理解一些使用為此應用程序開發的簡單語言編寫的復雜邏輯(規則)。 我們有兩種選擇:

  1. 解釋邏輯 - 運行嵌入式解釋器並生成動態函數調用,當接收數據時,基於解釋邏輯處理數據

  2. 將邏輯編譯成plugin.so動態共享文件,使用dlopen,dlsym加載插件並在運行時調用邏輯函數

選項2看起來非常有吸引力,因為它將是優化的機器代碼,在運行過程中運行速度比嵌入式解釋器快得多。

我正在探索的選項是:

    • 編寫一個編譯方法字符串編譯(字符串邏輯,列表和錯誤,列表和警告)
    • 這里輸入邏輯是一個包含用我們的自定義語言編碼的邏輯的字符
    • 它生成llvm ir,compile方法的返回值返回ir字符串
    • 寫鏈接方法bool link(string ir,string filename,list&errors,list&warnings)
    • 對於鏈接方法我搜索llvm文檔,但我還沒有找到是否有可能寫這樣的方法

    如果我是正確的,LLVM IR將轉換為LLVM字節代碼或匯編代碼。 然后使用LLVM JIT在JIT模式下運行或使用GNU Assembler用於生成本機代碼。

    是否有可能在LLVM中找到這樣做的功能? 如果它是從代碼中完成的,而不是使用來自C ++的系統命令來調用“as”來生成我的需求的plugin.so文件,那將會更好。

    如果您知道我可以在運行時從我的進程生成共享庫本機二進制代碼的任何方法,請通知我。

    這是一個llvm工具,它將LLVM-IR用於二進制代碼轉換。 我認為這就是你所需要的。

    基本上,您可以按照自己的方式生成LLVM IR,然后通過IR調用llc。

    您可以從命令行調用它,或者您可以轉到llc的實現,並了解它在您自己的程序中如何工作。

    這是一個有用的鏈接:

    http://llvm.org/docs/CommandGuide/llc.html

    我希望它有所幫助。

    暫無
    暫無

    聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

     
    粵ICP備18138465號  © 2020-2024 STACKOOM.COM