簡體   English   中英

使用jna從Java調用c ++ main方法

[英]invoke c++ main method from java using jna

我試圖在mac / unix環境中使用JNA從Java調用c ++方法。

我有兩個問題。

  1. 到目前為止,我可以成功實現簡單的示例,但是我不確定如何為以下C ++方法編寫Java計數器部分:

     int main(int argc, char* argv[]){...} 

我試過的Java代碼

public interface CTest extends Library {
        int main(int argc, Pointer argv);
    }

java.lang.UnsatisfiedLinkError:查找函數“ main”時出錯:dlsym(0x7fdee8c39300,main):找不到符號

還嘗試了以下

public interface CTest extends Library {
        int main(int argc, Object... argv[]);
        //doesnt work either - int main(int argc, String argv);
    }

無濟於事。 相同問題-找不到符號。 有小費嗎? 最終,我需要執行以下操作:

    CTest ctest = (CTest) Native.loadLibrary("ctest", CTest.class);
    String obj[] = new String[]{"-v, filepath/file"};
    ctest.main(2, obj);
  1. 第二個問題是有關在多線程環境中實現上述內容的問題。 我可能有多個位於不同位置的庫,因此System.setProperty("jna.library.path",path-to-dylib)無法工作。 我該如何實現?

好的,我自己弄清楚了,希望能有一個快速的答案,但無論如何。 解決方法如下:

答1:下面是我的界面方法。

    public interface CTest extends Library {
        public int main(int arc, String[] argv);
    }

答案2:這就是我計划處理多線程的方式

    String argv[] = {"-v","path-to-file/file.extension"};
    System.load(this.getClass().getResource("libmylib.dylib").getFile());
    //load a different library later if required.. this way multiple threads load respective libs when/what they want
    HelloJNA.CTest ctest = (HelloJNA.CTest) Native.loadLibrary("mylib", HelloJNA.CTest.class);

希望這可以幫助。

暫無
暫無

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

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