我试图在mac / unix环境中使用JNA从java调用c ++方法。
我有两个问题。
到目前为止,我可以成功实现简单的示例,但我不知道如何为以下内容编写java计数器部分 C ++方法:
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);
System.setProperty("jna.library.path",path-to-dylib)
不会工作。我怎样才能做到这一点?答案 0 :(得分:0)
好的,我自己想出来了,希望快速回答,不管怎样。 这是解决方案:
答案-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);
希望这有帮助。