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关键字
上一篇: DW使用正则表达式查找替换
下一篇: replace批量替换关键词