日期:2014-05-16  浏览次数:20635 次

求助:在Qt编写的程序下如何调用动态连接库中的函数!
我现在用Qt开发了一个简单的界面,程序中需要使用linux下的动态连接库,要向这个动态连接库的函数中传递一个参数,不知道要怎样处理。这个动态连接库也是我自己编写的。[b][/b]

------解决方案--------------------
动态链接库是一种通用的软件组件技术,是多种操作系统中提供基本服务的方式。比如Win32内核就是几个DLL文件构成。这种技术在Linux操作系统下也有对应的实现,就是Linux标准对象Standard Ojbect,对应的文件扩展名为.so。下面通过一个简单的例子开始介绍Linux标准对象。我们的标准对象文件含有一个函数,不需要声明export导出符号,只需要编译器设置即可。如下: 

#include <stdio.h>

void show() 

printf("Standard Object by gashero\n"); 


保存为myso.c文件,按照如下编译: 

$ gcc -fPIC -shared -o libmyso.so myso.c 

  执行生成一个libmyso.so文件,按照Linux标准对象的命名惯例,应该在库名称之前加上"lib"前缀,尽管不是必须的。编译开关-fPIC代表函数符号可以重定向,-shared代表编译结果是一个标准对象。 
  不同于Win32DLL,Linux标准对象中的所有函数都是直接导出的,都可以被调用程序所访问。下面我们编写调用程序: 

#include <stdio.h>

int main() 

printf("Invoke my so\n"); 
show(); 
return 0; 


保存为invoke.c,按照如下gcc开关编译: 

$ gcc -o test invoke.c ./libmyso.so 

  编译生成test可执行文件。如上编译条件的最后一条需要是所调用的标准对象文件名,注意必须含有路径。如果只是使用libmyso.so,则必须确保这个文件在可访问的PATH下面。本例所使用的文件名"./libmyso.so"是当前路径下的,使用了相对路径。 

测试输出结果如下: 

$ ./test 

Invoke my so 

Standard Object by gashero


http://www.vckbase.com/bbs/prime/viewprime.asp?id=678

------解决方案--------------------
楼上的介绍了动态连接库的使用,不过没提到传参问题,实际上动态连接库的传参就和普通函数一样


修改上面的myso.c文件为

C/C++ code

#include  <stdio.h > 

void show(int i)  
{  
    printf("Standard Object by gashero , arg = %d\n", i);  
}

------解决方案--------------------
探讨
谢谢!
问题已经解决了!
方法就是如上!

------解决方案--------------------
探讨
引用:
谢谢!
问题已经解决了!
方法就是如上!

解决了就结贴啊!

------解决方案--------------------
探讨
呵呵,一口气喘大半年了。。。

楼主别误会,没别的意思:)

------解决方案--------------------
探讨
引用:
呵呵,一口气喘大半年了。。。

楼主别误会,没别的意思:)



有点意思,呵呵