欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

windows VS封装JNI接口报错LINK2001无法解析的外部符号

程序员文章站 2024-02-22 21:43:19
...

报错原因

  • 未找到所调用的函数接口定义

常规办法

  • 将VS工程项目属性添加库文件以及库文件所在的头文件路径,通常情况下会解决。
  • 上述方法若依然解决不了,则考虑接口头文件的是否指定C编译关键字"extern C"
  • 由于源码中含有xx.c文件,且jni封装主要是针对C,而不是C++,因此编译器会报错,找不到接口函数的符号。

修改接口头文件

#ifndef SOURCE_TOOLS_H
#define SOURCE_TOOLS_H

#define _WIN_EXPORT_TEST
#ifdef _WIN32
#ifdef _WIN_EXPORT_TEST
#define EMBED_DLL_EXPORT __declspec(dllexport)
#else  
#define EMBED_DLL_EXPORT __declspec(dllimport)  
#endif  
#else  
#define EMBED_DLL_EXPORT   
#endif

#ifdef __cplusplus
extern "C" {
#endif

EMBED_DLL_EXPORT int functionApi(const char* infile,  const char* path, const char* code, const char* out);

#ifdef __cplusplus
}
#endif
#endif

Exception in thread “main” java.lang.UnsatisfiedLinkError: xxx()解决办法

  • 调用java 的dll时,不能找到native method 方法的实现
  • 原因:java 类对应native 方法名与xxx.h头文件中的接口中最后的包名不一致,封装时java头文件忘了加extern C关键字
相关标签: C++ jni