前言:
如今兄弟们对“java调用c的动态库”可能比较关怀,兄弟们都想要分析一些“java调用c的动态库”的相关知识。那么小编在网摘上汇集了一些有关“java调用c的动态库””的相关内容,希望各位老铁们能喜欢,朋友们快快来了解一下吧!1. 创建动态库
在Qt主界面,点击“文件”->“新建文件或项目”
选择“Library”、“C++ Library”,点击“Choose...”
指定库名为“MyDll1”,选择“qmake”后,一路默认,完成库的创建工作。
完成创建后,有4个文件:MyDll1_global.h、mydll1.h、mydll1.cpp、MyDll1.pro。
2. 添加库接口函数
在文件MyDll1_global.h中添加库接口函数add,添加后该文件中的代码如下:
#ifndef MYDLL1_GLOBAL_H
#define MYDLL1_GLOBAL_H
#include <QtCore/qglobal.h>
#if defined(MYDLL1_LIBRARY)
# define MYDLL1_EXPORT Q_DECL_EXPORT
#else
# define MYDLL1_EXPORT Q_DECL_IMPORT
#endif
/// 添加的接口函数
extern "C" {
MYDLL1_EXPORT int add(int a, int b);
}
///
#endif // MYDLL1_GLOBAL_H
在“mydll1.cpp”添加函数的实现,代码如下:
extern "C" {
int add(int a, int b) {
return a + b;
}
}
3. 显式调用动态库
使用Qt新建一个应用程序,在其main函数中显示调用动态库,具体代码如下:
#include <QApplication>
#include <QLibrary> // 添加
#include <QDebug> // 添加
// 声明函数指针类型
typedef int (*AddFunction)(int, int);
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
////// 显式调用动态库.
// 手工复制库文件到可执行文件所在目录
QLibrary library("./MyDll.dll"); // Windows示例路径
// QLibrary library("./MyDll.so"); // Linux示例路径
if (!library.load()) {
qDebug() << "无法加载库!";
return 0;
}
// 获取函数指针
AddFunction addFunction = (AddFunction)library.resolve("add");
if (!addFunction) {
qDebug() << "无法解析函数!";
library.unload(); // 卸载库
return 0;
}
// 调用函数并输出结果
int result = addFunction(3, 5);
qDebug() << "3 + 5 =" << result;
// 卸载库(可选)
library.unload();
///
MainWindow w;
w.show();
return a.exec();
}
参考资料:
(1) The future is written with Qt.
(2) QLibrary Class.
(3) qt 关于动态链接库,
标签: #java调用c的动态库 #java调用c动态库的指针