当前位置:编程学习 > wap >>

Qt5 在Linux 下的编译

在Linux下编译Qt5程序
代码
#include <QtGui/QApplication>
#include <QtGui/QLabel>

int main(int argc, char ** argv)
{
    QApplication app(argc, argv);
    QLabel *label=new QLabel("Hello QT!");
    label->show();
    return app.exec();
}

Makefile 文件
#############################################################################
# Makefile for building: testQT
# Generated by qmake (1.07a) (Qt 3.3.8b) on: Wed Nov 27 12:16:07 2013
# Project:  testQT.pro
# Template: app
# Command: $(QMAKE) -o Makefile testQT.pro
#############################################################################

####### Compiler, tools and options

CC       = gcc
CXX      = g++
LEX      = flex
YACC     = yacc
CFLAGS   = -pipe -Wall -W -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fno-strict-aliasing  -DQT_NO_DEBUG
CXXFLAGS = -pipe -Wall -W -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fno-strict-aliasing  -DQT_NO_DEBUG
LEXFLAGS = 
YACCFLAGS= -d
INCPATH  = -I/usr/lib64/qt-3.3/mkspecs/default -I. -I. -I$(QTDIR)/include
LINK     = g++
LFLAGS   = 
LIBS     = $(SUBLIBS) -L$(QTDIR)/lib -lqt-mt -lXext -lX11 -lm
AR       = ar cqs
RANLIB   = 
MOC      = $(QTDIR)/bin/moc
UIC      = $(QTDIR)/bin/uic
QMAKE    = qmake
TAR      = tar -cf
GZIP     = gzip -9f
COPY     = cp -f
COPY_FILE= $(COPY)
COPY_DIR = $(COPY) -r
INSTALL_FILE= $(COPY_FILE)
INSTALL_DIR = $(COPY_DIR)
DEL_FILE = rm -f
SYMLINK  = ln -sf
DEL_DIR  = rmdir
MOVE     = mv -f
CHK_DIR_EXISTS= test -d
MKDIR    = mkdir -p

####### Output directory

OBJECTS_DIR = ./

####### Files

HEADERS = 
SOURCES = main.cpp
OBJECTS = main.o
FORMS = 
UICDECLS = 
UICIMPLS = 
SRCMOC   = 
OBJMOC = 
DIST    = testQT.pro
QMAKE_TARGET = testQT
DESTDIR  = 
TARGET   = testQT

first: all
####### Implicit rules

.SUFFIXES: .c .o .cpp .cc .cxx .C

.cpp.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

.cc.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

.cxx.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

.C.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

.c.o:
$(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<

####### Build rules

all: Makefile $(TARGET)

$(TARGET):  $(UICDECLS) $(OBJECTS) $(OBJMOC)  
$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(OBJCOMP) $(LIBS)

mocables: $(SRCMOC)
uicables: $(UICDECLS) $(UICIMPLS)

$(MOC): 
( cd $(QTDIR)/src/moc && $(MAKE) )

Makefile: testQT.pro  /usr/lib64/qt-3.3/mkspecs/default/qmake.conf 
$(QMAKE) -o Makefile testQT.pro
qmake: 
@$(QMAKE) -o Makefile testQT.pro

dist: 
@mkdir -p .tmp/testQT && $(COPY_FILE) --parents $(SOURCES) $(HEADERS) $(FORMS) $(DIST) .tmp/testQT/ && ( cd `dirname .tmp/testQT` && $(TAR) testQT.tar testQT && $(GZIP) testQT.tar ) && $(MOVE) `dirname .tmp/testQT`/testQT.tar.gz . && $(DEL_FILE) -r .tmp/testQT

mocclean:

uiclean:

yaccclean:
lexclean:
clean:
-$(DEL_FILE) $(OBJECTS)
-$(DEL_FILE) *~ core *.core


####### Sub-libraries

distclean: clean
-$(DEL_FILE) $(TARGET) $(TARGET)


FORCE:

####### Compile

main.o: main.cpp 

####### Install

install:  

uninstall:  


若用makefile文件编译,qt-mt版本为 libqt-mt.so.3.3.8
   报错 
[wanglj@localhost testQT]$ make
g++  -o testQT main.o    -L/opt/Qt5.1.1/5.1.1/gcc_64/lib -lqt-mt -lXext -lX11 -lm
main.o: In function `main':
/home/wanglj/testQT/main.cpp:6: undefined reference to `QApplication::QApplication(int&, char**, int)'
main.o: In function `QString':
/usr/include/QtCore/qstring.h:413: undefined reference to `QString::fromAscii_helper(char const*, int)'
main.o: In function `main':
/home/wanglj/testQT/main.cpp:7: undefined reference to `QLabel::QLabel(QString const&, QWidget*, QFlags<Qt::WindowType>)'
main.o: In function `~QString':
/usr/include/QtCore/qstring.h:869: undefined reference to `QString::free(QString::Data*)'
/usr/include/QtCore/qstring.h:869: undefined reference to `QString::free(QString::Data*)'
collect2: ld 返回 1
make: *** [testQT] 错误 1

但若直接用 qtcreator 打开编译,则无错误
并且find -name libqt-mt* 也找不到其他版本的该文件

用qtcreator编译好的可执行文件,也找不到连接该lib文件

 [wanglj@localhost build-testQT-桌面-Debug]$ ldd testQT 
        linux-vdso.so.1 =>  (0x00007fff4ddff000)
        libQtGui.so.4 => /usr/lib64/libQtGui.so.4 (0x000000397f000000)
        libQtCore.so.4 => /usr/lib64/libQtCore.so.4 (0x000000397ea00000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003978600000)
        libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007fda6a081000)
        libm.so.6 => /lib64/libm.so.6 (0x0000003977a00000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003983a00000)
        libc.so.6 => /lib64/libc.so.6 (0x0000003977e00000)
        libgthread-2.0.so.0 => /lib64/libgthread-2.0.so.0 (0x000000397a600000)
        librt.so.1 => /lib64/librt.so.1 (0x0000003978e00000)
        libglib-2.0.so.0 => /lib64/libglib-2.0.so.0 (0x0000003979200000)
        libpng12.so.0 => /usr/lib64/libpng12.so.0 (0x000000397be00000)
        libz.so.1 => /lib64/libz.so.1 (0x0000003978a00000)
        libfreetype.so.6 => /usr/lib64/libfreetype.so.6 (0x000000397ba00000)
        libgobject-2.0.so.0 => /lib64/libgobject-2.0.so.0 (0x0000003979e00000)
        libSM.so.6 => /usr/lib64/libSM.so.6 (0x0000003985a00000)
        libICE.so.6 => /usr/lib64/libICE.so.6 (0x0000003984e00000)
        libXi.so.6 => /usr/lib64/libXi.so.6 (0x000000397ce00000)
        libXrender.so.1 => /usr/lib64/libXrender.so.1 (0x000000397d600000)
        libXrandr.so.2 => /usr/lib64/libXrandr.so.2 (0x000000397de00000)
        libXfixes.so.3 => /usr/lib64/libXfixes.so.3 (0x000000397da00000)
        libXcursor.so.1 => /usr/lib64/libXcursor.so.1 (0x000000397e200000)
        libXinerama.so.1 => /usr/lib64/libXinerama.so.1 (0x000000397e600000)
        libfontconfig.so.1 => /usr/lib64/libfontconfig.so.1 (0x000000397d200000)
        libXext.so.6 => /usr/lib64/libXext.so.6 (0x000000397c600000)
        libX11.so.6 => /usr/lib64/libX11.so.6 (0x000000397b600000)
        libdl.so.2 => /lib64/libdl.so.2 (0x0000003978200000)
        /lib64/ld-linux-x86-64.so.2 (0x0000003977600000)
        libuuid.so.1 => /lib64/libuuid.so.1 (0x0000003983600000)
        libexpat.so.1 => /lib64/libexpat.so.1 (0x000000397c200000)
        libxcb.so.1 => /usr/lib64/libxcb.so.1 (0x000000397ae00000)
        libXau.so.6 => /usr/lib64/libXau.so.6 (0x000000397aa00000) 


是否我使用qmake生成makefile时,需要加什么额外的参数,或者需要设置什么环境变量


QT5 QT --------------------编程问答-------------------- INCPATH  = -I/usr/lib64/qt-3.3/mkspecs/default -I. -I. -I$(QTDIR)/include
这一行看上去你调用的qmake不是5.1.1的。试试指定完整路径运行qmake
/opt/Qt5.1.1/5.1.1/gcc_64/bin/qmake testQT.pro
补充:移动开发 ,  Qt
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,