![](/img/trans.png)
[英]Problems having CMake access SWIG and link a java library to an existing C++ project
[英]Dynamic Link Library for Java/Python to access in C/C++?
一個快速的問題似乎與眾不同。 (相反)
而不是從解釋的語言調用本機代碼; 有沒有一種方法可以將Java或Python代碼編譯為.dll / .so並從C / C ++調用代碼?
我願意接受甚至答案,例如手動生成解釋器或JVM,並強制其讀取.class / .py文件。 (這是一個好的解決方案嗎?)
謝謝。
您可以在C / C ++程序中嵌入Python解釋器。
http://docs.python.org/2/extending/embedding.html
使用Java,您可能需要Java本機接口(雙向可用)。
gcj可以將大多數Java源代碼編譯為本機代碼(與libgcj
共享庫鏈接),而不是JVM字節碼。
有許多類似的Python項目,例如shedskin ,但沒有一個成熟或活躍的。
Cython
是相似的,但不是完全一樣的Cython
將用類似Python的語言編寫的模塊編譯為CPython的本機C擴展模塊。 但是,如果將其與將Python嵌入C應用程序結合在一起,它將為您提供大部分所需的東西。 但是,您仍在運行Python解釋器循環,以將所有這些C編譯功能綁定在一起。
您也可以使用Java做同樣的事情-將JVM嵌入到您的應用程序中,使用gcj
編譯要使用本機代碼的任何部分,同時將其他部分編譯為字節碼,並使用JNI在它們之間進行通信。
當然,您可以使用Jython將Python代碼嵌入到JVM中,然后將其嵌入到C程序中,並且因為您可以直接從Jython使用JNI,所以這三種語言中的任何一對都可以有效地相互交流,而無需經歷第三。
我認為您在問題中建議使用將JVM或CPython解釋器作為子進程生成的想法也很好。 但是,在這種情況下,您唯一需要的接口是子進程的stdin / stdout / stderr(或您手動創建的任何管道或套接字),其靈活性不如直接在對象上調用方法的靈活性,等等。(然后,有時,額外的間接訪問可能是一件好事,這迫使您在組件之間定義一個完全分隔的API。)
您還可以研究Lua,雖然它沒有像其他許多腳本語言一樣廣泛使用,但它可以輕松地嵌入到可執行文件中。 它相對較小且速度很快。 只是另一個選擇。 如果要從c / c ++調用其他語言,請查看SWIG。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.