java - JNI:程序显示“AWT-EventQueue-0”java.lang.UnsatisfiedLinkError:client.dll:找不到指定的过程”
问题描述
我有一个 java 程序,它需要一个用 C++ 编译的库。为此,我生成了 JNI 头文件,然后使用 JNI 将我的 c++ 应用程序库编译为 .dll。目前,我遇到了一个问题,即链接完成后,我无法运行我的 java 程序。它在下面显示以下错误:
public app.IncClientTester(java.lang.String,java.lang.String,java.lang.String)
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: IncClient.dll: The specified
procedure could not be found
这是我的 Java 代码:
public class IncClientTester extends Tester {
public IncClientTester(String h, String u, String p) {
super(h, u, p);
// TODO Auto-generated constructor stub
}
public native boolean getComponentStatus(int status, int ver);
public native boolean getDeviceThresholdHit();
static {
System.loadLibrary("IncClient");
}
}
这是我的 C++ 代码:
JNIEXPORT jboolean JNICALL Java_app_IncClientTester_getComponentStatus (JNIEnv*, jobject, jint applstat, jint applversion) {
// some code in here
return status // boolean
}
这是我的 C++ Cmakelist.txt:
project(Inc)
cmake_minimum_required(VERSION 2.8)
cmake_policy(SET CMP0015 NEW)
cmake_policy(SET CMP0081 NEW)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -std=c++0x")
#find_package(vsomeip 2.14.16 REQUIRED)
# Boost
find_package( Boost 1.59 COMPONENTS system thread log REQUIRED )
include_directories( ${Boost_INCLUDE_DIR} )
if(Boost_FOUND)
if(Boost_LIBRARY_DIR)
MESSAGE( STATUS "Boost_LIBRARY_DIR not empty using it: ${Boost_LIBRARY_DIR}" )
else()
if(BOOST_LIBRARYDIR)
MESSAGE( STATUS "Boost_LIBRARY_DIR empty but BOOST_LIBRARYDIR is set setting Boost_LIBRARY_DIR to: ${BOOST_LIBRARYDIR}" )
set(Boost_LIBRARY_DIR ${BOOST_LIBRARYDIR})
endif()
endif()
else()
MESSAGE( STATUS "Boost was not found!")
endif()
message(STATUS "vsomeip is found, version:"${vsomeip_VERSION})
include_directories(
src-gen
capicxx-core-runtime-3.2.0/include
capicxx-someip-runtime-3.2.0/include
vsomeip/interface
"C:/Program Files/Java/jdk1.8.0_261/include"
"C:/Program Files/Java/jdk1.8.0_261/include/win32"
)
link_directories(
capicxx-core-runtime-3.2.0/build/Debug
capicxx-someip-runtime-3.2.0/build/Debug
vsomeip/build/Debug
#/usr/lib
)
# Voltage
add_library(IncClient SHARED
src/IncClient.cpp
src-gen/v1/commonapi/IncSomeIPProxy.cpp
src-gen/v1/commonapi/IncSomeIPDeployment.cpp
)
target_link_libraries(IncClient CommonAPI CommonAPI-SomeIP vsomeip3)
有人可以帮助我指导我如何解决这个问题。
解决方案
推荐阅读
- jquery - 带有历史记录的可链接选项卡 - 后退按钮问题
- driver - Windows 驱动程序:使用命令行工具安装旧版硬件
- php - 如何返回随机键数组?
- javascript - 我们如何在事件 jquery 中绑定事件?
- javascript - 从ajax发送json数组以查看spring mvc的困难
- jupyter-notebook - 在所有 Jupyter 笔记本单元的开头自动插入 %%time?
- python - 使用 Pandas 抛出错误在 Python 中编写 UDF
- linux - 在 git pre commit hook 中获取文件名
- c - MINGW + SQLITE3 - DLL / 链接器问题
- java - 如何在 Spring Data JPA 中为用户返回不同值的 Map 及其计数?