使用现有C程序编写Qt程序时找不到符号

时间:2017-11-03 02:49:21

标签: c++ c qt gnu-make qmake

我在C中编写了一个ftp客户端(使用GNU make),现在想用Qt为它编写GUI。

在构建时,出现错误:

error: symbol(s) not found for architecture x86_64
linker command failed with exit code 1 (use -v to see invocation)
Undefined symbols for architecture x86_64:
  "showHelpMsg()", referenced from:
  _main in main.o

我的main.cpp看起来像这样:

include "client.h" 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    ftpClient w;
    w.show();
    showHelpMsg();
    return a.exec();
}

client.h:

#include"common.h"
#include"handler.h"
#include"util.h"    //These headers works fine while using gnu make    
void showHelpMsg();

client.c:

include "client.h" 
void showHelpMsg()
{
    //....
}

我的project.pro :(由Qt生成的自动)

SOURCES += main.cpp\
    ftpclient.cpp \
client.c \
common.c \
handler.c \
util.c

HEADERS  += ftpclient.h \
client.h \
common.h \
handler.h \
util.h

作为参考,这是我以前的makefile:

objects = client.o handler.o util.o common.o

server : $(objects)
cc -Wall -o client $(objects)

.PHONY : clean
clean :
    rm client $(objects)

1 个答案:

答案 0 :(得分:0)

尝试将client.h更改为:

#ifdef __cplusplus
extern "C" {
#endif
#include"common.h"
#include"handler.h"
#include"util.h"
void showHelpMsg();
#ifdef __cplusplus
}
#endif

问题可能是C ++编译器需要showHelpMsg是带有错位名称的C ++函数,而C编译器只生成具有普通名称的普通C函数。