qt 默认的编程语言为 C++ 语言。 如果你用 qt 编译 .c 文件, 会出现找不到 C 语言的默认头文
件等错误(如: stdio.h 等)。 qt 中不支持
extern "C"{} 的这种写法, 我前几天有一个 C 程序需要移植到 Qt 的工程中,本希望直接 extern
"C" 就 ok 了,但发现 qt4 居然不支持这种写法。 我的程序中用到了好几个 linux 系统头文件,
是向串口发指令之类的程序,程序中用到了互斥锁并创建了一个线程。如果再用 qt 语言来
写一遍的话我会挂掉的,所以没有办法,在网上找了半天,终于找到解决方法。
将.c 文件编译为函数库的方式在 qt 下调用,这种方法貌似行得通,我就开始行动了。
下面的内容讲得比较多,比较全,比较适合初学者,是我在网上 down 的,给出了原网站的
链接,最后给出了一个程序。经过自己整理好归纳如下:
需要说明的是:使用 gcc 可以将程序编译成动态库或者静态库的形式,它们在程序中的调
用的方式也不尽相同, 给出的程序中调用的是动态连接库。 编译成动态的还是静态的根据自
己的需要进行。如果原 C 程序编译的时候需要 gcc 的额外选项 (如 gcc -lpthread -o hello
hello.c) 等,建议采用动态的形式。
1.什么是静态连接库,什么是动态链接库
静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你
愿不愿意, lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。 但是若使用 DLL ,
该 DLL 不必被包含在最终 EXE 文件中, EXE 文件执行时可以 “动态 ”地引用和卸载这个
与 EXE 独立的 DLL 文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不
能再包含其他的动态链接库或者静态库, 而在动态链接库中还可以再包含其他的动态或静态
链接库。在 windows 和 linux 上都是相同的,只不过文件的格式不同而已。
http://www.cnblogs.com/winston/archive/2008/07/05/1236273.html
2.gcc 生成静态库和动态库
第 1 步:编辑得到举例的程序 --hello.h 、 hello.c 和 main.c ;
第 2 步:将 hello.c 编译成 .o 文件;