2015-06-19 69 views
4

假設我正在用C++設計一個跨平臺的應用程序,該應用程序可以通過附加組件進行用戶擴展。然後應用程序提供一個C++ API並加載動態對象(.so.dll等)。但是,這對於用戶必須針對6個目標平臺(Windows x86/x86-64,MacOS X x86/x86-64和GNU/Linux x86/x86-64)進行編譯來說很麻煩。在Java中使用Java作爲「腳本」語言

爲了保持便攜性,我想提供一個Ruby API使用libruby。通過一些工作,我帶來了一個概念證明。問題是我很擔心表演。這些加載項可能會變大,並且CRuby並不是那麼快。

然後我想,爲什麼不是Java

  • Java字節碼具有更好的運行時性能,尤其是使用JIT;
  • 它是便攜式;
  • 分銷很簡單,用戶只需要提供一個jar;
  • 用戶可以提供閉源加載項(即使反編譯Java字節碼並不困難);
  • 更多的人比Ruby更瞭解Java。

現在的問題是,如何做到這一點?我做了一些研究,只發現約JNIJava原生接口)。然而,這似乎能夠從Java調用C++而不是其他方式。

+0

請檢查這個早期的崗位http://stackoverflow.com/questions/819536/how-to-call -java-功能從-C –

回答

3

您可以使用JNI Invocation API,它允許您從C或C++啓動VM。

啓動虛擬機後,JNI specification列出了許多其他用於與Java交互的C函數。

我做了一些研究,只發現了關於JNI(Java本地接口)。然而,這似乎能夠從Java調用C++而不是其他方式。

你可能看原生功能,它允許你在C.定義Java方法