andylei

常用链接

统计

最新评论

在QT中编写linux 程序 初次问题

今天在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

posted on 2010-03-25 17:07 逆水行舟 阅读(546) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理