####1.源码下载和解压
源码目录:
(1)源码下载目录:/mnt/hgfs/windows_share/clock_project/qt_source/qt-everywhere-opensource-src-5.6.2.7z
(2)创建工作目录,并解压 /home/aston/qt5.x_porting/qt5.6.2
(3)创建安装目录 /opt/qt5.6.2
####2.配置
(1)配置相应的qmake
vi qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
//找到和我们的很像的linux-arm-很像,所以我们基于这个改
打开这个文件,添加如下内容
#aston added
QT_QPA_DEFAULT_PLATFORM = linuxfb
#linuxfb表示非窗口的配置
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a #armv7-a 表示机器架构:armv7
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a
修改下面内容:
# modifications to g++.conf
QMAKE_CC = arm-linux-gcc -lts //-lts表示添加tslib
QMAKE_CXX = arm-linux-g++ -lts -ldl
QMAKE_LINK = arm-linux-g++ -lts -ldl
QMAKE_LINK_SHLIB = arm-linux-g++ -lts -ldl
# modifications to linux.conf
QMAKE_AR = arm-linux-ar cqs
QMAKE_OBJCOPY = arm-linux-objcopy
QMAKE_NM = arm-linux-nm -P
QMAKE_STRIP = arm-linux-strip
(2)编译前配置(可以参考./configure --help的提示来配置)
//注意\后面什么都不能有连空格都不行,不然容易出错
/******************命令的解释**********************/
./configure -prefix /opt/qt5.6.2 \ 这个目录一定是自己创建的哪个
-opensource \ 开源的
-confirm-license \ 设置license
-release \ release版本不是debug的版本
-shared \ 分享的
-accessibility \ 没研究过
-c++std c++98 \ 设置c++的标准为98而导致了qt的版本不能太高
-xplatform linux-arm-gnueabi-g++ \ //linux-arm-gnueabi-g++决定了要到qtbase/mkspecs/linux-arm-gnueabi-g++目录的qmake.conf去编译
-qpa linuxfb \ 使用linuxfb
-linuxfb \
-qreal float \
-pch \
-qt-zlib \
-qt-libjpeg \ 添加libjpeg这个库
-qt-libpng \
-no-sse2 \ 去掉sse2这个库
-no-largefile \
-no-qml-debug \
-no-glib \
-no-gtkstyle \
-no-opengl \
-nomake tools \
-nomake examples \
-tslib \
-skip qt3d -skip qtcanvas3d -skip qtdoc -skip qtwayland \
-I /opt/tslib/include \ -I表示编译时去找头文件的地址
-L /opt/tslib/lib 导出lib的共享库
/*********************************************/
####命令:
./configure -prefix /opt/qt5.6.2 \
-opensource \
-confirm-license \
-release \
-shared \
-accessibility \
-c++std c++98 \
-xplatform linux-arm-gnueabi-g++ \
-qpa linuxfb \
-linuxfb \
-qreal float \
-pch \
-qt-zlib \
-qt-libjpeg \
-qt-libpng \
-no-sse2 \
-no-largefile \
-no-qml-debug \
-no-glib \
-no-gtkstyle \
-no-opengl \
-nomake tools \
-nomake examples \
-tslib \
-skip qt3d -skip qtcanvas3d -skip qtdoc -skip qtwayland \
-I /opt/tslib/include \
-L /opt/tslib/lib
####3.编译中的错误解决
(1)找不到dlopen或者dlsym
在编译器后面加ldl arm-linux-g++ -ldl
(2)undefined reference to `__sync_add_and_fetch_4’
参考http://www.mamicode.com/info-detail-1699895.html
把linux-atomic.c复制到/home/aston/qt5.x_porting/linux_atomic中执行
#apt-get install libtool-bin
#libtool --tag=CC --mode=compile arm-linux-gcc -g -O2 -MT linux-atomic.lo -MD -MP -MF linux-atomic.Tpo -c -o linux-atomic.lo linux-atomic.c
#libtool --tag=CC --mode=link arm-linux-g++ -g -O2 -o liblinux-atomic.la linux-atomic.lo
利用libtool生成liblinux-atomic.a(这个文件在.libs目录中生成的),注意生成的目录名叫.libs所以是隐藏的
cp .libs/liblinux-atomic.a /opt/linux-atomic
// 注意/opt/linux-atomic是自己事先创建的
在QT源码下修改:./qtscript/src/script/Makefile
在LIBS = 的结尾添加 -L/opt/linux-atomic -llinux-atomic
####4. make install 安装即可
5.安装qt-opensource-linux-x64-5.6.2.run到/opt/QT5.6.2_Untu_SDK中
/opt/QT5.6.2_Untu_SDK/Tools/QtCreator/bin 执行qtcreator
5.1配置交叉编译工具
另外如果单纯搭建Linux上的QT环境可以参考:
https://blog.csdn.net/qq_30155503/article/details/80093784
按照上面的链接的步骤一步步做,直到下面位置不同:
三、配置环境
我设置的安装环境是
/usr/local/Qtcreator/ 为Qtcreator的安装目录
/usr/local/Qt-5.6.2 为Qt SDK 的安装目录
我发现5.6.2的有3个文件夹有bin和lib的目录,因为之前按照上面链接的更改,有错误,所以我就把3个文件的lib和bin都包含进去了(你们对照自己的目录更改即可)
还要注意:
1.chmod -R 777 XXXX.run目录(就是你下载的Qtcreator的.run可执行目录)它的权限一定是可执行的
2.因为我添加了Qtcreator到PATH目录,直接运行qtcreator显示没有可执行程序,那么我们可以通过建立软链接的方式实现,
cd /usr/bin
ln -s /usr/local/Qtcreator/Tools/QtCreator/bin/qtcreator qtcreator
(/usr/local/Qtcreator/Tools/QtCreator/bin/qtcreator是我的安装目录,可以对应更改一哈)
3.那么在任意位置可直接运行qtcreator就可以启动qt
export QTDIR=/usr/local/
export PATH=$QTDIR/Qt5.6.2/bin:$QTDIR/Qtcreator/5.6/gcc_64/bin:$QTDIR/Qtcreator/Tools/QtCreator/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/Qtcreator/5.6/gcc_64/lib:$QTDIR/Qt-5.6.2/lib:$QTDIR/Qtcreator/Tools/QtCreator/bin:$LD_LIBRARY_PATH