Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在CMake中使用Java生成\u本地\u头_Java_Cmake_Java Native Interface - Fatal编程技术网

在CMake中使用Java生成\u本地\u头

在CMake中使用Java生成\u本地\u头,java,cmake,java-native-interface,Java,Cmake,Java Native Interface,CMake看起来真的很酷。就在前几天,我发现我可以用它将Java源代码编译成JAR。也有一个选择。但是,它不会为我生成标题。生成的Makefile调用javac,而不调用-h someplace。有什么我可能遗漏的提示吗?这就是我到目前为止所做的: CMakeLists.txt 本地的 SomeJava.java 如果我手动调用javac来生成SomeJava.h,它工作得很好。根据中的示例,您可能希望链接到生成的接口目标,名为SomeJava native: 然后,可以使用target_lin

CMake看起来真的很酷。就在前几天,我发现我可以用它将Java源代码编译成JAR。也有一个选择。但是,它不会为我生成标题。生成的Makefile调用
javac
,而不调用
-h someplace
。有什么我可能遗漏的提示吗?这就是我到目前为止所做的:

CMakeLists.txt 本地的 SomeJava.java 如果我手动调用
javac
来生成
SomeJava.h
,它工作得很好。

根据中的示例,您可能希望链接到生成的
接口
目标,名为
SomeJava native

然后,可以使用target_link_libraries()命令将生成的本机头目标用于编译C/C++源代码

目前,您的代码似乎没有使用此目标,因此您可以将其添加到CMake文件的末尾:

target_link_libraries(native PRIVATE SomeJava-native)


此外,请确保您的CMake版本为3.11或更高版本,因为早期版本中没有“生成本地”标题功能。

您使用的是哪个版本的JDK?还有,CMake的哪个版本?@squareskittles CMake 3.10和Java 11。如有必要,我可以升级到更新的版本。请参阅我的更新答案,您的CMake版本可能是问题所在。@squareskittles我没有意识到我使用了几天的文档所指的版本与使用的版本不同。不过,只差一个小版本。我不知道CMake不会抱怨未知选项。非常感谢。
#include "SomeJava.h"
JNIEXPORT void JNICALL Java_SomeJava_printHelloWorld(JNIEnv * env, jclass cls) {
    printf("Native Hello World!\n");
}
public class SomeJava {
    public static void main(String[] args) {
        printHelloWorld();
    }
    static {
        System.loadLibrary("native");
    }
    public static native void printHelloWorld();
}
target_link_libraries(native PRIVATE SomeJava-native)