ARM9上编译QT4.8.5
关于qtcreator 目前选择,直接下载安装即可。
https://download.qt.io/archive/qtcreator/2.8/2.8.0/
注意:在编译openssl 是要注意增加 enable-shared
./config --prefix=/home/jkwang/work/openssl-linux enable-shared
LINUX 上编译
1、解压文件
2、进入目录下打开,打开命令行输入
1) config
./mkspecs/linux-g++/qmake.conf中添加:
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS -std=gnu++98 -fPIC
创建sh 文件qt_compile_conf.sh
#!/bin/sh
OPENSSL_LIBS='-L/home/jkwang/work/openssl-linux/lib -lssl -lcrypto'
./configure \
-prefix /home/jkwang/work/qtlinux \
-shared \
-openssl-linked \
-I /home/jkwang/work/openssl-linux/include \
-L /home/jkwang/work/openssl-linux/lib \
执行
sh ./qt_compile_conf.sh
提示
Which edition of Qt do you want to use ?
Type 'c' if you want to use the Commercial Edition.
Type 'o' if you want to use the Open Source Edition.
o
You don't seem to have 'make' or 'gmake' in your PATH.
此时提示是缺少make
安装cmake
sudo apt install cmake
安装成功以后继续执行config指令,又报错如下:
Creating qmake. Please wait...
g++ -c -o project.o -pipe -DQMAKE_OPENSOURCE_EDITION -g -I. -Igenerators -Igenerators/unix -Igenerators/win32 -Igenerators/mac -Igenerators/symbian -Igenerators/integrity -I/home/jkwang/work/qt-everywhere-opensource-src-4.8.5/include -I/home/jkwang/work/qt-everywhere-opensource-src-4.8.5/include/QtCore -I/home/jkwang/work/qt-everywhere-opensource-src-4.8.5/src/corelib/global -I/home/jkwang/work/qt-everywhere-opensource-src-4.8.5/src/corelib/xml -I/home/jkwang/work/qt-everywhere-opensource-src-4.8.5/tools/shared -DQT_NO_PCRE -DQT_BUILD_QMAKE -DQT_BOOTSTRAPPED -DQLIBRARYINFO_EPOCROOT -DQT_NO_TEXTCODEC -DQT_NO_UNICODETABLES -DQT_NO_COMPONENT -DQT_NO_STL -DQT_NO_COMPRESS -I/home/jkwang/work/qt-everywhere-opensource-src-4.8.5/mkspecs/linux-g++ -DHAVE_QCONFIG_CPP -DQT_NO_THREAD -DQT_NO_QOBJECT -DQT_NO_GEOM_VARIANT -DQT_NO_DEPRECATED project.cpp
make: g++: Command not found
Makefile:259: recipe for target 'project.o' failed
make: *** [project.o] Error 127
提示g++ 未安装,继续安装
sudo apt install g++
安装成功以后继续执行config指令,又报错如下:
Basic XLib functionality test failed!
You might need to modify the include and library search paths by editing
QMAKE_INCDIR_X11 and QMAKE_LIBDIR_X11 in /home/jkwang/work/qt-everywhere-opensource-src-4.8.5/mkspecs/linux-g++.
提示缺失libxtst-dev libx11-dev libxext-dev 相关的库;继续安装
sudo apt install libxtst-dev libx11-dev libxext-dev
安装成功以后继续执行config指令,然后就一路执行成功,中途可能会有一些warning ,不要理会;
2)最后提示config 成功,再输入编译
make -j8
编译时需要两个问题
问题一:
../3rdparty/javascriptcore/JavaScriptCore/wtf/HashTable.h:272:89:
错误:调用重载的‘swap(std::pair<QTWTF::RefPtr<QTJSC::UStringImpl>, QTJSC::SymbolTableEntry>&, std::pair<QTWTF::RefPtr<QTJSC::UStringImpl>, QTJSC::SymbolTableEntry>&)’有歧义
template<typename T> struct Mover<T, true> { static void move(T& from, T& to) { swap(from, to); } };
解决:
./mkspecs/linux-g++/qmake.conf中添加:
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS -std=gnu++98
问题二:
In file included from ../3rdparty/javascriptcore/JavaScriptCore/wtf/FastAllocBase.h:84:0,
from ../3rdparty/javascriptcore/JavaScriptCore/wtf/Vector.h:24,
from ../3rdparty/javascriptcore/JavaScriptCore/pcre/pcre_exec.cpp:50:
../3rdparty/javascriptcore/JavaScriptCore/wtf/TypeTraits.h:173:69: 错误:‘std::tr1’尚未声明
template<typename T> struct HasTrivialConstructor : public std::tr1::has_trivial_constructor<T> { };
解决:
src/3rdparty/javascriptcore/JavaScriptCore/wtf/TypeTraits.h文件中将:
#if (defined(__GLIBCXX__) && (__GLIBCXX__ >= 20070724) && defined(__GXX_EXPERIMENTAL_CXX0X__)) || (defined(_MSC_VER) && (_MSC_VER >= 1600))
#include <type_traits>
#endif
修改为:
#if (defined(__GLIBCXX__) && (__GLIBCXX__ >= 20070724) && defined(__GXX_EXPERIMENTAL_CXX0X__)) || (defined(_MSC_VER) && (_MSC_VER >= 1600))
#include <tr1/type_traits>
#endif
等待十多分钟以后输入
make install
ARM 侧交叉编译
安装32位库
sudo apt-get install libc6:i386 libstdc++6:i386
sudo apt-get install lib32z1
1、进入目录
/home/jkwang/work/qt-everywhere-opensource-src-4.8.5-arm/mkspecs/qws/linux-arm-gnueabi-g++
修改文件qmake.conf 如下:
#
# qmake configuration for building with arm-none-linux-gnueabi-g++
#
include(../../common/linux.conf)
include(../../common/gcc-base-unix.conf)
include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
QMAKE_CC = arm-linux-gnueabi-gcc
QMAKE_CXX = arm-linux-gnueabi-g++
QMAKE_LINK = arm-linux-gnueabi-g++
QMAKE_LINK_SHLIB = arm-linux-gnueabi-g++
# modifications to linux.conf
QMAKE_AR = arm-linux-gnueabi-ar cqs
QMAKE_OBJCOPY = arm-linux-gnueabi-objcopy
QMAKE_STRIP = arm-linux-gnueabi-strip
load(qt_config)
2、编辑config 文件
创建sh 文件qt_compile_conf.sh
#!/bin/sh
export PATH=$PATH:/usr/lib/gcc/arm-linux-gnueabi/bin
./configure \
-prefix /home/jkwang/work/qtarm \
-DQT_ARCH_ARM \
-D__ARM_ARCH_5TEJ__ \
-release \
-opensource \
-shared \
-no-exceptions \
-no-accessibility \
-no-stl \
-no-qt3support \
-no-xmlpatterns \
-no-multimedia \
-no-audio-backend \
-no-phonon \
-no-phonon-backend \
-no-svg \
-no-webkit \
-no-javascript-jit \
-no-script \
-no-scripttools \
-no-declarative \
-no-declarative-debug \
-no-gif \
-no-libmng \
-no-libtiff \
-nomake tools \
-nomake demos \
-nomake examples \
-nomake docs \
-nomake translations \
-no-nis \
-no-cups \
-no-iconv \
-no-pch \
-no-dbus \
-embedded arm \
-xplatform /qws/linux-arm-gnueabi-g++ \
-no-gtkstyle \
-no-nas-sound \
-no-opengl \
-no-openvg \
-no-sm \
-no-xshape \
-no-xvideo \
-no-xsync \
-no-xinerama \-no-xcursor \
-no-xfixes \
-no-xrandr \
-no-xrender \
-no-mitshm \
-no-fontconfig \
-no-xinput \
-no-xkb \
-no-freetype \
-no-glib \
执行如下指令
export PATH=$PATH:/usr/lib/gcc/arm-linux-gnueabi/bin
sh ./qt_compile_conf.sh
一路没问题后,输入
make -j8
make install