打印
[技术问答]

请教新塘nuc970buildroot的编译qt的问题。

[复制链接]
1309|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
redworlf|  楼主 | 2020-2-12 19:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、用buildroot编译nuc980的uboot、内核、文件系统。
2、要用到qt,在buildroot里面勾选了qt5,然后make。
3、但是编译出来的qt5的qmake,是x86上的。
qmake: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/l, for GNU/Linux 2.6.32, BuildID[sha1]=fc30ab90b17852716715509395c35f082944605f, not stripped

这个不对呀,应该编译出来的qmake是arm下的才对啊,buildroot里面有交叉编译工具的,编译出来的其他工具都是arm下的,谁搞过讲讲看?

使用特权

评论回复
沙发
jiekou001| | 2020-2-12 19:39 | 只看该作者
应该是什么设置没选对。

使用特权

评论回复
板凳
小明的同学| | 2020-2-12 20:53 | 只看该作者
没玩过这

使用特权

评论回复
地板
yiy| | 2020-2-12 22:05 | 只看该作者

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib
QMAKE_PLATFORM         += linux unix posix
QMAKE_LEX               = flex
QMAKE_LEXFLAGS         +=
QMAKE_YACC              = yacc
QMAKE_YACCFLAGS        += -d
QMAKE_YACCFLAGS_MANGLE += -p $base -b $base
QMAKE_YACC_HEADER       = $base.tab.h
QMAKE_YACC_SOURCE       = $base.tab.c
QMAKE_PREFIX_SHLIB      = lib
QMAKE_EXTENSION_SHLIB   = so
QMAKE_PREFIX_STATICLIB  = lib
QMAKE_EXTENSION_STATICLIB = a
QMAKE_CFLAGS_THREAD    += -D_REENTRANT
QMAKE_CXXFLAGS_THREAD  += $QMAKE_CFLAGS_THREAD
QMAKE_LFLAGS_GCSECTIONS = -Wl,--gc-sections
QMAKE_LFLAGS_REL_RPATH  = -Wl,-z,origin
QMAKE_REL_RPATH_BASE    = $ORIGIN
QMAKE_INCDIR            =
QMAKE_LIBDIR            =
QMAKE_INCDIR_X11        =
QMAKE_LIBDIR_X11        =
QMAKE_INCDIR_OPENGL     =
QMAKE_LIBDIR_OPENGL     =
QMAKE_INCDIR_OPENGL_ES2 = $QMAKE_INCDIR_OPENGL
QMAKE_LIBDIR_OPENGL_ES2 = $QMAKE_LIBDIR_OPENGL
QMAKE_INCDIR_EGL        =
QMAKE_LIBDIR_EGL        =
QMAKE_INCDIR_OPENVG     =
QMAKE_LIBDIR_OPENVG     =
QMAKE_LIBS              =
QMAKE_LIBS_DYNLOAD      = -ldl
QMAKE_LIBS_X11          = -lXext -lX11 -lm
QMAKE_LIBS_NIS          = -lnsl
QMAKE_LIBS_EGL          = -lEGL
QMAKE_LIBS_OPENGL       = -lGL
QMAKE_LIBS_OPENGL_ES2   = -lGLESv2
QMAKE_LIBS_OPENVG       = -lOpenVG
QMAKE_LIBS_THREAD       = -lpthread
QMAKE_LIBS_LIBUDEV      = -ludev
QMAKE_CFLAGS_WAYLAND    =
QMAKE_INCDIR_WAYLAND    =
QMAKE_LIBS_WAYLAND_CLIENT = -lwayland-client
QMAKE_LIBS_WAYLAND_SERVER = -lwayland-server
QMAKE_LIBDIR_WAYLAND    =
QMAKE_DEFINES_WAYLAND   =
QMAKE_WAYLAND_SCANNER   = wayland-scanner
QMAKE_CFLAGS_XCB        =
QMAKE_LIBS_XCB          =
QMAKE_DEFINES_XCB       =

QMAKE_AR                = arm-poky-linux-gnueabi-ar cqs
QMAKE_OBJCOPY           = arm-poky-linux-gnueabi-objcopy
QMAKE_NM                = arm-poky-linux-gnueabi-nm -P
QMAKE_RANLIB            = arm-poky-linux-gnueabi-ranlib
QMAKE_STRIP             = arm-poky-linux-gnueabi-strip
QMAKE_STRIPFLAGS_LIB   += --strip-unneeded

QMAKE_CFLAGS_OPTIMIZE       = -O2
QMAKE_CFLAGS_OPTIMIZE_FULL  = -O3
QMAKE_CFLAGS               += -pipe
QMAKE_CFLAGS_DEPS          += -M
QMAKE_CFLAGS_WARN_ON       += -Wall -W
QMAKE_CFLAGS_WARN_OFF      += -w
QMAKE_CFLAGS_RELEASE       += $QMAKE_CFLAGS_OPTIMIZE
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $QMAKE_CFLAGS_OPTIMIZE -g
QMAKE_CFLAGS_DEBUG         += -g -feliminate-unused-debug-types
QMAKE_CFLAGS_SHLIB         += -fPIC
QMAKE_CFLAGS_STATIC_LIB    += -fPIC
QMAKE_CFLAGS_APP           += -fPIC
QMAKE_CFLAGS_ISYSTEM        = -isystem
QMAKE_CFLAGS_YACC          += -Wno-unused -Wno-parentheses
QMAKE_CFLAGS_HIDESYMS      += -fvisibility=hidden
QMAKE_CFLAGS_EXCEPTIONS_OFF += -fno-exceptions
QMAKE_CFLAGS_SPLIT_SECTIONS += -ffunction-sections
QMAKE_CFLAGS_LTCG           = -flto -fno-fat-lto-objects
QMAKE_CFLAGS_LTCG_FATOBJECTS = -ffat-lto-objects
QMAKE_CFLAGS_DISABLE_LTCG   = -fno-lto
QMAKE_CFLAGS_SSE2      += -msse2
QMAKE_CFLAGS_SSE3      += -msse3
QMAKE_CFLAGS_SSSE3     += -mssse3
QMAKE_CFLAGS_SSE4_1    += -msse4.1
QMAKE_CFLAGS_SSE4_2    += -msse4.2
QMAKE_CFLAGS_AVX       += -mavx
QMAKE_CFLAGS_AVX2      += -mavx2
QMAKE_CFLAGS_NEON      += -mfpu=neon
QMAKE_CFLAGS_PRECOMPILE       = -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
QMAKE_CFLAGS_USE_PRECOMPILE   = -include ${QMAKE_PCH_OUTPUT_BASE}

QMAKE_CXXFLAGS            += $QMAKE_CFLAGS
QMAKE_CXXFLAGS_DEPS       += $QMAKE_CFLAGS_DEPS
QMAKE_CXXFLAGS_WARN_ON    += $QMAKE_CFLAGS_WARN_ON
QMAKE_CXXFLAGS_WARN_OFF   += $QMAKE_CFLAGS_WARN_OFF
QMAKE_CXXFLAGS_RELEASE    += $QMAKE_CFLAGS_RELEASE
QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_CXXFLAGS_DEBUG      += $QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS_SHLIB      += $QMAKE_CFLAGS_SHLIB
QMAKE_CXXFLAGS_STATIC_LIB += $QMAKE_CFLAGS_STATIC_LIB
QMAKE_CXXFLAGS_APP        += $QMAKE_CFLAGS_APP
QMAKE_CXXFLAGS_YACC       += $QMAKE_CFLAGS_YACC
QMAKE_CXXFLAGS_HIDESYMS   += $QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden
QMAKE_CXXFLAGS_EXCEPTIONS_OFF += $QMAKE_CFLAGS_EXCEPTIONS_OFF
QMAKE_CXXFLAGS_SPLIT_SECTIONS += $QMAKE_CFLAGS_SPLIT_SECTIONS
QMAKE_CXXFLAGS_LTCG        = $QMAKE_CFLAGS_LTCG
QMAKE_CXXFLAGS_LTCG_FATOBJECTS = $QMAKE_CFLAGS_LTCG_FATOBJECTS
QMAKE_CXXFLAGS_DISABLE_LTCG   = $QMAKE_CFLAGS_DISABLE_LTCG
QMAKE_CXXFLAGS_PRECOMPILE     = -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
QMAKE_CXXFLAGS_USE_PRECOMPILE = $QMAKE_CFLAGS_USE_PRECOMPILE
QMAKE_CXXFLAGS_CXX11    = -std=c++0x
QMAKE_CXXFLAGS_CXX14    = -std=c++1y
QMAKE_CXXFLAGS_CXX1Z    = -std=c++1z
QMAKE_CXXFLAGS_GNUCXX11 = -std=gnu++0x
QMAKE_CXXFLAGS_GNUCXX14 = -std=gnu++1y
QMAKE_CXXFLAGS_GNUCXX1Z = -std=gnu++1z

QMAKE_LFLAGS           += -Wl,--hash-style=gnu -Wl,--as-needed
QMAKE_LFLAGS_DEBUG     +=
QMAKE_LFLAGS_APP       +=
QMAKE_LFLAGS_RELEASE   +=
QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO +=
QMAKE_LFLAGS_EXCEPTIONS_OFF +=
QMAKE_LFLAGS_LTCG       = $QMAKE_CFLAGS_LTCG -fuse-linker-plugin
QMAKE_LFLAGS_SHLIB     += -shared
QMAKE_LFLAGS_PLUGIN    += $QMAKE_LFLAGS_SHLIB
QMAKE_LFLAGS_SONAME    += -Wl,-soname,
QMAKE_LFLAGS_THREAD    +=
QMAKE_LFLAGS_RPATH      = -Wl,-rpath,
QMAKE_LFLAGS_RPATHLINK  = -Wl,-rpath-link,
QMAKE_LFLAGS_NEW_DTAGS  = -Wl,--enable-new-dtags
QMAKE_LFLAGS_USE_GOLD   = -fuse-ld=gold
QMAKE_LFLAGS_BSYMBOLIC_FUNC = -Wl,-Bsymbolic-functions
QMAKE_LFLAGS_DYNAMIC_LIST   = -Wl,--dynamic-list,
QMAKE_LFLAGS_VERSION_SCRIPT = -Wl,--version-script,
QMAKE_LFLAGS_CXX11      =
QMAKE_LFLAGS_CXX14      =
QMAKE_LFLAGS_CXX1Z      =
QMAKE_LFLAGS_RELEASE   += -Wl,-O1
QMAKE_LFLAGS_NOUNDEF   += -Wl,--no-undefined

QMAKE_AR_LTCG           = gcc-ar cqs
QMAKE_NM_LTCG           = gcc-nm -P

QMAKE_RANLIB_LTCG       = true          # No need to run since gcc-ar has "s"
QMAKE_COMMON_SANITIZE_CFLAGS   = -fno-omit-frame-pointer
QMAKE_COMMON_SANITIZE_CXXFLAGS = -fno-omit-frame-pointer
QMAKE_SANITIZE_ADDRESS_CFLAGS     = -fsanitize=address
QMAKE_SANITIZE_ADDRESS_CXXFLAGS   = -fsanitize=address
QMAKE_SANITIZE_ADDRESS_LFLAGS     = -fsanitize=address
QMAKE_SANITIZE_THREAD_CFLAGS      = -fsanitize=thread
QMAKE_SANITIZE_THREAD_CXXFLAGS    = -fsanitize=thread
QMAKE_SANITIZE_THREAD_LFLAGS      = -fsanitize=thread
QMAKE_SANITIZE_MEMORY_CFLAGS      = -fsanitize=memory
QMAKE_SANITIZE_MEMORY_CXXFLAGS    = -fsanitize=memory
QMAKE_SANITIZE_MEMORY_LFLAGS      = -fsanitize=memory
QMAKE_SANITIZE_UNDEFINED_CFLAGS   = -fsanitize=undefined
QMAKE_SANITIZE_UNDEFINED_CXXFLAGS = -fsanitize=undefined
QMAKE_SANITIZE_UNDEFINED_LFLAGS   = -fsanitize=undefined

QMAKE_COMPILER          = arm-poky-linux-gnueabi-gcc  -march=armv7-a -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a9 --sysroot=/opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi
QMAKE_CC                = arm-poky-linux-gnueabi-gcc  -march=armv7-a -mfpu=neon  -mfloat-abi=hard -mcpu=cortex-a9 --sysroot=/opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi
QMAKE_LINK_C            = $QMAKE_CC
QMAKE_LINK_C_SHLIB      = $QMAKE_CC
QMAKE_CXX               = arm-poky-linux-gnueabi-g++  -march=armv7-a -mfpu=neon  -mfloat-abi=hard -mcpu=cortex-a9 --sysroot=/opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi
QMAKE_LINK              = $QMAKE_CXX
QMAKE_LINK_SHLIB        = $QMAKE_CXX

QMAKE_PCH_OUTPUT_EXT    = .gch

load(qt_config)

使用特权

评论回复
5
yiy| | 2020-2-12 22:05 | 只看该作者
是不是可以自己修改

使用特权

评论回复
6
yiy| | 2020-2-12 22:05 | 只看该作者
1、首先,QT编译环境默认是动态库,要编译静态程序是不可能的,所以要下载QT源码,重新编译QT编译环境

2、下载QT源码(5.13版本):http://download.qt.io/development_releases/qt/5.13/5.13.0-rc/single/qt-everywhere-src-5.13.0-rc.tar.xz

3、编译QT前需先配置交叉编译器:

  解压源码后,进入源码的qtbase/mkspecs/linux-arm-gnueabi-g++目录,编辑里面的qmake.conf文件:

  将文件里的arm-linux-gnueabi-都改为你用的交叉编译器(带路径,如果不带路径则需设置好PATH变量)比如改为:arm-linux-gnueabihf-

4、用静态方式编译并安装QT
  在源码目录下执行如下命令:  

  ./configure -v -prefix /home/wch/Qt-5-arm -static -release -opensource -confirm-license -xplatform linux-arm-gnueabi-g++ -no-accessibility -no-dbus -no-openssl -no-opengl -no-glib -no-iconv -no-xcb -no-pch -no-compile-examples -no-pkg-config -skip qtquickcontrols -skip qtquickcontrols2 -skip qtsensors -skip qtdoc -skip qtwayland
  make
  make install

  其中/home/wch/QT-5-arm是安装目录,根据你的情况指定;-static是指定为静态编译;-xplatform linux-arm-gnueabi-g++是说明目标平台是arm,其它参数根据自己的情况自行修改,各参数的含义可以用./configure --help命令查看

  经过上面三步,就在指定的/home/wch/QT-5-arm目录下生成的QT的编译环境,该环境的bin目录下有qmake程序。

5、编译你的工程

  假设你的工程名称是t1.pro,用如下命令编译:

    qmake -o Makefile t1.pro

    make

  则会生成静态程序,一个最简单的窗口程序大约10M。

  用命令t1 -platform linuxfb运行,但是运行时会发现报错:Could not find the Qt platform plugin "linuxfb"

  在t1.pro工程文件里添加一行:QTPLUGIN += qlinuxfb

  再用之前的命令重新编译一下,运行成功!  

使用特权

评论回复
7
zhuomuniao110| | 2020-2-13 11:27 | 只看该作者
这个是必须自动生成?

使用特权

评论回复
8
zhuomuniao110| | 2020-2-13 11:27 | 只看该作者
安装了ARM的环境吗

使用特权

评论回复
9
redworlf|  楼主 | 2020-2-13 18:19 | 只看该作者

安装了啊,我uboot和内核都能正常编译,编译出来烧录后能跑。

使用特权

评论回复
10
redworlf|  楼主 | 2020-2-13 18:19 | 只看该作者
yiy 发表于 2020-2-12 22:05
1、首先,QT编译环境默认是动态库,要编译静态程序是不可能的,所以要下载QT源码,重新编译QT编译环境

2、 ...

你好,你说的我看明白了,我纠结的是buildroot里面勾选了qt5,为啥buildroot自己不能把这个搞对。。。好难。

使用特权

评论回复
11
玛尼玛尼哄| | 2020-2-14 13:30 | 只看该作者
不懂啊

使用特权

评论回复
12
幸福小强| | 2020-2-15 20:48 | 只看该作者
开发这个不需要用Keil这种软件吧

使用特权

评论回复
13
gejigeji521| | 2020-2-16 14:23 | 只看该作者
不知道啊,没玩过这个,肯定某个环节么搞对。

使用特权

评论回复
14
zhuotuzi| | 2020-2-16 18:50 | 只看该作者
新塘官方的github上有没有说方法。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

144

帖子

1

粉丝