簡體   English   中英

Java / Python的動態鏈接庫可以在C / C ++中訪問?

[英]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本機接口(雙向可用)。

http://en.wikipedia.org/wiki/Java_Native_Interface

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.

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