为什么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 文件来链接函数。



相关推荐