Questions tagged «java-native-interface»

Java本机接口(JNI)既使JVM实现能够运行系统本机代码,又使本机代码能够运行Java代码(通过创建新的JVM实例)。JNI的最常见目标语言是C和C ++,至少Sun / Oracle JDK实现为其提供了帮助程序命令(javap-用于代码反汇编,javah用于c代码生成)。

30
无法加载JNI共享库(JDK)
当我尝试打开Eclipse时,弹出对话框指出: 无法加载JNI共享库“ C:/JDK/bin/client/jvm.dll”。 此后,Eclipse强制关闭。 我想提出以下几点: 我检查了该路径是否存在任何东西。它确实存在。 我的Eclipse和Java SE开发套件都是64位的。我检查了系统,它可以处理64位。 我已经在Google和Stack Overflow上搜索了此问题,发现的唯一答案是下载32位版本的JDK和Eclipse。 作为最后的选择,我只想下载32位版本。 有什么建议可以解决这个问题?







2
JNI将jstring转换为char *
我已经通过jstring使用JNI 将URL字符串从Java传递为C代码作为数据类型。而且我的库方法需要一个char *as url。 我如何转换jstring的char *? PS:在C中使用jcharArray有什么优势吗?(即char []在本地方法中传递而不是字符串)

6
如何在JAR内捆绑本机库和JNI库?
有问题的图书馆是东京内阁。 我想要在一个JAR文件中具有本机库,JNI库和所有Java API类,以避免重新分配的麻烦。 似乎在GitHub上有尝试,但是 它不包括实际的本机库,仅包括JNI库。 它似乎特定于Leiningen的本机依赖插件(它不能作为可再发行组件使用)。 问题是,我可以将所有内容捆绑在一个JAR中并重新分发吗?如果是,怎么办? PS:是的,我意识到这可能会带来可移植性。

15
未定义对__android_log_print的引用
我的make文件怎么了? Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := foo LOCAL_SRC_FILES := foo.c LOCAL_EXPORT_LDLIBS := -llog include $(BUILD_SHARED_LIBRARY) foo.c #include <string.h> #include <jni.h> #include <android/log.h> #define LOG_TAG "foo" #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__) void test() { LOGI("test"); } ndk构建 foo.c:9: undefined reference to `__android_log_print'

9
如何从默认包中导入类
可能的重复:如何在默认包中访问java类? 我正在使用Eclipse 3.5,并且已经创建了一个具有某些包结构以及默认包的项目。我在默认包中有一个类-Calculations.java,并且我想在任何包中使用该类(例如在中com.company.calc)。当我尝试使用默认软件包中的类时,它给了我一个编译器错误。无法识别默认程序包中的类。问题出在哪里? Calculations.java-源代码 public class Calculations { native public int Calculate(int contextId); native public double GetProgress(int contextId); static { System.loadLibrary("Calc"); } } 我不能将我的课程放在其他任何包中。此类具有一些在Delphi中实现的本机方法。如果我将该类放在任何文件夹中,则必须对要避免的DLL进行更改(真的-我不能)。这就是为什么我将班级放在默认包中的原因。

4
如何在Android上的JNI下捕获SIGSEGV(分段错误)并获得堆栈跟踪?
我正在将一个项目移到新的Android Native Development Kit(即JNI)上,我想抓住SIGSEGV(如果它发生的话(可能还有SIGILL,SIGABRT,SIGFPE)),以便呈现一个不错的崩溃报告对话框,而不是(或之前)当前发生的情况:该进程立即异常死亡,并且操作系统可能会尝试重新启动它。(编辑: JVM / Dalvik VM捕获信号并记录堆栈跟踪和其他有用的信息;我只想向用户提供将这些信息通过电子邮件发送给我的选项。) 情况是:我没有编写大量的C代码,完成了该应用程序中的大部分工作(所有游戏逻辑),尽管在许多其他平台上都经过了充分的测试,但我在Android中完全有可能端口,将其作为垃圾进行处理并在本机代码中导致崩溃,因此我希望当前显示在Android日志中的崩溃转储(本机和Java)(我猜在非Android情况下将是stderr)。我可以随意修改C和Java代码,尽管回调(传入和传出JNI)的数量大约为40,显然,小差异的加分。 我听说过J2SE,libjsig.so中的信号链库,并且如果我可以在Android上安全地安装类似的信号处理程序,那将解决我的问题中的棘手部分,但是我没有看到这样的Android / Dalvik库。


2
在Android中从C ++调用Java方法
我试图从C ++获得一个简单的Java方法调用,而Java调用本机方法。这是Java代码: public class MainActivity extends Activity { private static String LIB_NAME = "name"; static { System.loadLibrary(LIB_NAME); } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView tv = (TextView) findViewById(R.id.textview); tv.setText(this.getJniString()); } public void messageMe(String text) { System.out.println(text); } public …

17
如何修复JNI项目中的UnsatisfiedLinkError(找不到依赖库)
我正在使用JNI的Java项目中。JNI调用了一个我自己编写的自定义库,比方说mylib.dll,它依赖于一个第三方库libsndfile-1.dll。 当我运行程序时,它崩溃 java.lang.UnsatisfiedLinkError: C:\...path...\mylib.dll: Can't find dependent libraries. 我已经搜索了该网站(和其他网站),并且尝试了许多修复程序: 我跑了依赖沃克。DW发出了一些警告-libsndfile所需的两个库MPR.DLL和SHLWAPI.DLL具有“未解决的导入”-但DW FAQ表示可以安全地忽略这些警告。 我已按照此处的建议将方法名称固定在mylib.dll中。方法名称已经被编译器弄乱了,但是我添加了链接器标志,并且dll方法名称现在与我的jni头文件中的名称完全匹配。 我将所有这些DLL放在相同的目录中-与调用它们的.jar相同的目录中-以确保它们在正确的PATH上。 没有骰子。 有人知道发生了什么吗? 我正在使用MacBook Pro(通过Parallels)在Visual Studio 2010中进行开发。我正在使用东芝笔记本电脑在Windows XP中进行测试。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.