Qt GUI工程里用extern声明外部C函数的有关问题
Qt GUI工程里用extern声明外部C函数的问题本帖最后由 u011434036 于 2013-10-16 10:17:55 编辑想要在Qt GU
Qt GUI工程里用extern声明外部C函数的问题
本帖最后由 u011434036 于 2013-10-16 10:17:55 编辑 想要在Qt GUI工程里调用一个已经编好的C函数,想到了用外部函数,先把该C函数所在的.c文件文件添加到GUI工程里,然后在使用该C程序的文件里用extern声明该函数,简单代码如下:
//调用C函数的文件
#include "dialog.h"
#include "ui_dialog.h"
extern void test();
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
}
void Dialog::__test()
{
test();
}
//C函数所在.C文件
#include <stdio.h>
void test()
{//具体实现略
}
编译出现错误,提示无法解析的外部符号和无法解析的外部命令,在这里请教各位大神,在Qt GUI里能否使用extern声明和使用外部C函数和外部变量,如果可以正确的方法是什么,我的错误出在哪里,在Qt gui工程里使用外部C文件已定义好的函数的方法有哪些,问题较多,请大家不吝赐教~~~ extern 外部函数 Qt?GUI
[解决办法]楼主你好 !引用外部c函数我是这么做的:
1、包含头文件
#if defined (__cplusplus)
extern "C" {
#endif
#include "xxx.h" //外部c文件的头文件
#endif
#if defined (__cplusplus)
}
#endif
2、指定链接
把外部的c文件编译成库,修改qmake出来的Makefile,指定链接库就可以了。
[解决办法]Qt是基于C++的,C++能做的事Qt都能做
extern "C" void test();
C++带名称修饰,而C是在函数名前直接加一个下划线
[解决办法]编译器对 c++ 和 c 的代码处理方式有区别的,编译器一般根据文件扩展名来判断是c++代码,还是c代码。
你这里的 test函数定义在 c代码中,编译的时候按c的方式编译。
你在c++代码中声明的 test函数 ,编译器会认为它是一个c++函数,所以链接的时候就会出错。
要在c++代码中使用c中的函数,必须显式地声明来告诉编译器这是一个c函数。
即 extern "C" void test();