qt4中如何调用C函数(linux下)

qt4中如何调用C函数(linux下)

ID:37712586

大小:39.00 KB

页数:6页

时间:2019-05-29

qt4中如何调用C函数(linux下)_第1页
qt4中如何调用C函数(linux下)_第2页
qt4中如何调用C函数(linux下)_第3页
qt4中如何调用C函数(linux下)_第4页
qt4中如何调用C函数(linux下)_第5页
资源描述:

《qt4中如何调用C函数(linux下)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、qt默认的编程语言为C++语言。如果你用qt编译.c文件,会出现找不到C语言的默认头文件等错误(如:stdio.h等)。qt中不支持extern"C"{}的这种写法,我前几天有一个C程序需要移植到Qt的工程中,本希望直接extern"C"就ok了,但发现qt4居然不支持这种写法。我的程序中用到了好几个linux系统头文件,是向串口发指令之类的程序,程序中用到了互斥锁并创建了一个线程。如果再用qt语言来写一遍的话我会挂掉的,所以没有办法,在网上找了半天,终于找到解决方法。将.c文件编译为函数库的方式在qt下调用,这种方法貌似行得通,我就开始行动了。下面的内容讲得比较多,比较全,比

2、较适合初学者,是我在网上down的,给出了原网站的链接,最后给出了一个程序。经过自己整理好归纳如下:需要说明的是:使用gcc可以将程序编译成动态库或者静态库的形式,它们在程序中的调用的方式也不尽相同,给出的程序中调用的是动态连接库。编译成动态的还是静态的根据自己的需要进行。如果原C程序编译的时候需要gcc的额外选项(如gcc-lpthread-ohellohello.c)等,建议采用动态的形式。  1.什么是静态连接库,什么是动态链接库静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都全部被直接包含在最终生成的EXE文件中了。但是若

3、使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。在windows和linux上都是相同的,只不过文件的格式不同而已。http://www.cnblogs.com/winston/archive/2008/07/05/1236273.html2.gcc生成静态库和动态库第1步:编辑得到举例的程序--hello.h、hello.c和main.c;第2步:将hello.c编

4、译成.o文件;无论静态库,还是动态库,都是由.o文件创建的。因此,我们必须将源程序hello.c通过gcc先编译成.o文件。在系统提示符下键入以下命令得到hello.o文件。#gcc-chello.c第3步:由.o文件创建静态库;静态库文件名的命名规范是以lib为前缀,紧接着跟静态库名,扩展名为.a。例如:我们将创建的静态库名为myhello,则静态库文件名就是libmyhello.a。在创建和使用静态库时,需要注意这点。创建静态库用ar命令。在系统提示符下键入以下命令将创建静态库文件libmyhello.a。#arcrvlibmyhello.ahello.o第4步:在程序中使

5、用静态库;静态库制作完了,如何使用它内部的函数呢?只需要在使用到这些公用函数的源程序中包含这些公用函数的原型声明,然后在用gcc命令生成目标文件时指明静态库名,gcc将会从静态库中将公用函数连接到目标文件中。注意,gcc会在静态库名前加上前缀lib,然后追加扩展名.a得到的静态库文件名来查找静态库文件。在程序3:main.c中,我们包含了静态库的头文件hello.h,然后在主程序main中直接调用公用函数hello。下面先生成目标程序hello,然后运行hello程序看看结果如何。(#gcc-ohellomain.c-L.-lmyhello??)#gccmain.clibmyh

6、ello.a-omain#./hello第5步:由.o文件创建动态库文件;动态库文件名命名规范和静态库文件名命名规范类似,也是在动态库名增加前缀lib,但其文件扩展名为.so。例如:我们将创建的动态库名为myhello,则动态库文件名就是libmyhello.so。用gcc来创建动态库。在系统提示符下键入以下命令得到动态库文件libmyhello.so。#gcc-shared-fPCI-olibmyhello.sohello.o第6步:在程序中使用动态库;在程序中使用动态库和使用静态库完全一样,也是在使用到这些公用函数的源程序中包含这些公用函数的原型声明,然后在用gcc命令生成

7、目标文件时指明动态库名进行编译。我们先运行gcc命令生成目标文件,再运行它看看结果。#gcc-ohellomain.c-L.-lmyhello#./hello./hello:errorwhileloadingsharedlibraries:libmyhello.so:cannotopensharedobjectfile:Nosuchfileordirectory哦!出错了。快看看错误提示,原来是找不到动态库文件libmyhello.so。程序在运行时,会在/usr/lib和/lib等目录中查

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。