先制作个简单的动态链接库,再在Qt里面加载它。
【制作动态链接库】
先编写一个hello.c
1 #include <stdio.h> 2 int hello() 3 { 4 printf("hello world!\n"); 5 }
在Linux下编译,生成hello.o:
gcc -c hello.c
编译成动态链接库libhello.so(注意:Linux下的动态链接库以lib开始命名):
gcc -shared -o libhello.so hello.o
【加载动态链接库】
在Qt中加载libhello.so,先创建一个空的Qt工程,添加新文件main.c,内容如下:
1 #include <stdio.h> 2 #include <QLibrary> 3 4 int main(int argc, char *argv[]) 5 { 6 QLibrary *hello_lib = NULL; 7 //写清楚库的路径,如果放在当前工程的目录下,路径为./libhello.so 8 hello_lib = new QLibrary("/home/libhello.so"); 9 10 //加载动态库 11 hello_lib->load(); 12 if (!hello_lib->isLoaded()) 13 { 14 printf("load libhello.so failed!\n"); 15 return 0; 16 } 17 18 //定义函数指针 19 typedef void (*Fun)(); 20 21 //resolve得到库中函数地址 22 Fun hello = (Fun)hello_lib->resolve("hello"); 23 if (hello) 24 { 25 hello(); 26 } 27 28 //卸载库 29 hello_lib->unload(); 30 return 0; 31 }
运行后输出:hello world!