为什么qt中调用dll却需要lib文件,而jni中调用dll却不需lib文件
阅读数:95 评论数:0
跳转到新版页面分类
C/C++
正文
JNI 调用 DLL
-
动态加载:JNI 使用
System.loadLibrary()
或System.load()
方法来动态加载 DLL。这个过程不需要链接时的静态库(.lib 文件),因为 Java 本身不进行编译时链接。它是在运行时通过 JNI 接口直接调用 DLL 中的函数。 -
函数签名:在 JNI 中,函数签名是通过特定的命名约定和
jni.h
文件中的宏来定义的。Java 代码通过 JNI 调用本地方法时,JVM 会根据方法签名查找对应的本地实现。
Qt 调用 DLL
-
编译时链接:在 C++ 中(包括 Qt 项目),编译器需要在编译时知道函数的声明和调用约定。这通常通过静态库(.lib 文件)提供,这个库包含了函数的符号信息。
-
.lib 文件作用:.lib 文件用于链接器在编译时解析函数符号,并为最终的可执行文件生成正确的调用代码。虽然运行时仍然需要 DLL,但编译时需要 .lib 文件来解决符号。
-
头文件和库文件:在 Qt 项目中,除了 .lib 文件,你还需要包含头文件以获得函数的声明。
总结
- JNI 依赖于运行时动态加载,因此不需要 .lib 文件。
- Qt/C++ 需要在编译时解析符号,这就是为什么需要 .lib 文件来链接函数。