- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 makeifile,其任务如下。当我编译时,我得到一个链接器错误,但我不确定为什么,因为我正在链接/包含到 java 库。我验证了 $JAVA_HOME 存在并且 libjvm.so 存在于 /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/server
出错:
(.text+0x5a): undefined reference to `JNI_CreateJavaVM'
collect2: error: ld returned 1 exit status
生成文件:
my_program:
gcc -L${JAVA_HOME}/jre/lib/amd64/server/ \
-I${JAVA_HOME}/include/ \
-I${JAVA_HOME}/include/linux/ \
-ljvm \
my_program.c
run: my_program
./a.out
c 字段:
#include <jni.h>
int main ( int argc, char **argv ) {
printf("hello\n");
return 0;
}
JNIEnv *create_vm(JavaVM **jvm){
JNIEnv *env = NULL;
JavaVMInitArgs vm_args;
JavaVMOption options;
// options.optionString = "-Djava.class.path=" JAVA_PROG_PATH;
// vm_args.version = JNI_VERSION_1_7;
vm_args.nOptions = 1;
vm_args.options = &options;
vm_args.ignoreUnrecognized = 0;
int ret = JNI_CreateJavaVM(jvm, (void **)&env, &vm_args);
char *failed = "nothing";
if(ret < 0){
goto create_vm_error;
}
return env;
lookup_error:
dlog(0, "Error looking up class or method %s.\n", failed);
(**jvm)->DestroyJavaVM(*jvm);
create_vm_error:
*jvm = NULL;
return NULL;
}
最佳答案
听起来很愚蠢 - 将 -ljmv 移到 my_program.c 之后:
my_program:
gcc -L${JAVA_HOME}/jre/lib/amd64/server/ \
-I${JAVA_HOME}/include/ \
-I${JAVA_HOME}/include/linux/ \
my_program.c \
-ljvm
run: my_program
./a.out
这是一个常见的错误,因为 GCC 要求您的编译单元 (my_program.c
) 在库规范之前提供(是的,编译单元应该严格位于库的左侧) 这样它就可以从该库中分辨出它需要哪些符号。如果顺序颠倒,gcc 会扣除不需要的符号,库将不会被使用...
如果每次发生这种事我都能得到一分钱
关于java - JNI 调用的 Makefile 不起作用 - 未定义对 JNI_CreateJavaVM 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39108134/
我第一次尝试通过 JNI 从 C++ 加载 JVM,但我似乎无法让它工作。调用 JNI_CreateJavaVM 时出现段错误。 代码非常简单(主要是从在线示例中复制的): #include #inc
我找到了 http://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/invocation.html 是 JNI 调用函数的文档。 但
我在 JNI_CreateJavaVM 方法创建 JVM 时遇到问题,应用程序只是“程序‘[4616] VnptTokenCplusplus.exe: Native’已退出,代码为 1 (0x1)。”
JNI_CreateJavaVM 方法的第三个参数将第三个参数作为 JavaVMInitArgs 结构。 typedef struct JavaVMInitArgs {
我正在尝试启动两个调用“DispFrontEnd”函数的线程第一个线程正常结束,第二个线程无法启动 jvm.. ?? 谢谢 #include "jni.h" #include #include "S
我正在使用一个在库代码中调用 JNI_CreateJavaVM 函数的库。但是,我还需要一些 JNI 包装,并且我需要调用相同的函数 JNI_CreateJavaVM 来为我的应用程序获取 JNIEn
当我使用 Ubuntu 10.10 gcc 在 32GB 的 24 核机器上调用 JNI_CreateJavaVM() 时,它会启动 26 个线程。这似乎有点矫枉过正。在哪里可以设置创建的线程数?谢谢
我有一个 Windows MFC 应用程序: (1) 加载 JVM (JNI_CreateJavaVM()) (2) 将主线程附加到 JVM (AttachCurrentThread()) (3) 加
我有一个 C DLL,它使用 JNI 来代理对执行实际举重的底层 Java 程序的任何调用。我正在动态加载 jrockit jvm.dll 以进行函数调用。 供应商 A 有一个 C# DLL,它实际上
我在 JNI 中使用 C++ 作为我的母语。我能够创建 (c++) 共享库,并且能够在共享库的帮助下调用 java 函数。 我的过程中涉及的步骤: 1) 使用 JNI_CreateJavaVm 创建
有两种方法可以让 Android 原生 C/C++ 调用 Java 代码。 Java 应用程序首先调用 native 函数。 native 函数保存 JavaVM 和 JNIEnv,然后使用它们调用
这是在 Ubuntu 12.04/Java 7,64 位上 致力于为 WebkitGtk 版本 2 创建 java 绑定(bind)的项目。我对 WebkitGTK 的主要兴趣是 DOM 访问和操作,
在 valgrind 下编译和运行以下代码时,我一直收到“Invalid write of size 4”错误。有没有一种调用 JNI_CreateJavaVM() 的简洁方法,这样 valgrind
我正在尝试使用 JNI 从 C++ 调用 Java 方法。为此,我安装了 jdk1.7.0_51,链接到 jdk1.7.0_51\lib\jvm.lib,包括 jdk1.7.0_51\include
尝试从 native 代码调用 java 方法时出现错误。 [arm64-v8a] Compile++ : hell #include int main(){ JavaVM *j
我有 2 个项目。两者都是在 Ubuntu 64 位上的 Netbeans IDE 中创建的。 首先,我的 .so 项目实现了从其 C++ 代码调用 Java 函数。我的控制台应用程序尝试调用 .so
这发生在带有 64 位应用程序的 linux 2.6.18-238.5.1.el5 上。我的进程堆栈大小是 10MB。但是,在(成功)调用 JNI_CreateJavaVM 之后,堆栈上似乎只剩下 1
我正在开发带有 C++ 部分的 Xamarin.Android 应用程序。现在我需要从 C++ 库中直接调用 Android Java 接口(interface)。 我从 Caleb Fenton's
最近我开始在我的项目中使用JNI。这是我的代码: options[0].optionString = "-Djava.class.path=."; memset(&vm_args, 0, sizeof
在我的 C++ 应用程序中,我需要通过 JNI 调用“jar”文件内的一些 java 函数。 然而,在调用 JNI_CreateJavaVM 函数之后,我的应用程序内存增加了 3、4 GB。我怀疑这是
我是一名优秀的程序员,十分优秀!