JNI构建C文件(架构x86_64的未定义符号)

时间:2016-08-07 03:52:23

标签: macos build java-native-interface linker-errors x86-64

我正在尝试在OSX上构建.c文件,但我一直在:

Undefined symbols for architecture x86_64

#include "Test.h"  

JNIEXPORT jint JNICALL Java_Test_test
  (JNIEnv * env, jclass cls, jbyteArray s, jlong ss, jbyteArray sss, jlong ssss, jbyteArray sssss, jlong ssssss) {

  /*printf("Hello World!\n");*/
  return 1;
}

内置:

clang++ -o test -I/Library/Java/JavaVirtualMachines/jdk1.8.0_65.jdk/Contents/Home/include  -I/Library/Java/JavaVirtualMachines/jdk1.8.0_65.jdk/Contents/Home/include/darwin Test.cpp

Undefined symbols for architecture x86_64:   "_main", referenced from:
     implicit entry/start for main executable ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

我需要安装一些东西吗?

1 个答案:

答案 0 :(得分:0)

clang++ -o test Test.cpp正在尝试编译并链接以生成可运行的可执行文件。您没有定义main(),所以当它尝试链接CRT代码(调用用户提供的main()时)时会失败。)

也许您打算使用clang++ -fPIC -shared -o libtest.so Test.cpp -I...(保持所有其他选项相同),以创建像JNI需要的共享库。或者.dylib.jnilib,通常在您的平台上调用任何库。

如果您正在学习没有告诉您如何编译代码的教程,那么它可能不是一个非常好的教程,您应该找到更好的文档。