今天在QT中编译纯linux程序时出现一个编译错误:
multiple definition of main
搜不半天,也没有合适的办法。
问题的出现原因在于项目的创建过程:
使用QT创建了一个含有main.cpp的项目,然后添加了一些*.c文件,因为同一个项目中不想同时包含两种不同类型的源文件,所以就把main.cpp改成了main.c. 但是,QT的项目文件(tcpserver.pro)中的内容多出了一个main.c来,这样,编译时,qmake会根据这个.pro文件生成Makefile, 这个Makefile中就会包含两个相同的目标main.o,连接的时候就会出现上面的错误。
QT -= gui
TARGET = tcpserver
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.c \
../../../lib/wrapsock.c \
main.c \
../../../lib/str_echo.c \
../../../lib/error.c \
../../../lib/wrapunix.c \
../../../lib/writen.c \
../../../lib/readline.c
HEADERS += ../../../lib/unp.h
生成的Makefile如下:
####### Compile
main.o: main.c ../../../lib/unp.h \
../config.h \
../../../lib/addrinfo.h
$(CC) -c $(CFLAGS) $(INCPATH) -o main.o main.c
wrapsock.o: ../../../lib/wrapsock.c ../../../lib/unp.h \
../config.h \
../../../lib/addrinfo.h
$(CC) -c $(CFLAGS) $(INCPATH) -o wrapsock.o ../../../lib/wrapsock.c
main.o: main.c ../../../lib/unp.h \
../config.h \
../../../lib/addrinfo.h
$(CC) -c $(CFLAGS) $(INCPATH) -o main.o
str_echo.o: ../../../lib/str_echo.c ../../../lib/unp.h \
../config.h \
../../../lib/addrinfo.h
$(CC) -c $(CFLAGS) $(INCPATH) -o str_echo.o ../../../lib/str_echo.c
error.o: ../../../lib/error.c ../../../lib/unp.h \
../config.h \
../../../lib/addrinfo.h
$(CC) -c $(CFLAGS) $(INCPATH) -o error.o ../../../lib/error.c
解决办法是:
修改项目文件(tcpserver.pro)
,去掉重复的main.c.然后依次调用
clean all
qmake
make