[技术问答] 请教新塘nuc970buildroot的编译qt的问题。

[复制链接]
 楼主| 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 | 显示全部楼层

  1. MAKEFILE_GENERATOR      = UNIX
  2. CONFIG                 += incremental
  3. QMAKE_INCREMENTAL_STYLE = sublib
  4. QMAKE_PLATFORM         += linux unix posix
  5. QMAKE_LEX               = flex
  6. QMAKE_LEXFLAGS         +=
  7. QMAKE_YACC              = yacc
  8. QMAKE_YACCFLAGS        += -d
  9. QMAKE_YACCFLAGS_MANGLE += -p $base -b $base
  10. QMAKE_YACC_HEADER       = $base.tab.h
  11. QMAKE_YACC_SOURCE       = $base.tab.c
  12. QMAKE_PREFIX_SHLIB      = lib
  13. QMAKE_EXTENSION_SHLIB   = so
  14. QMAKE_PREFIX_STATICLIB  = lib
  15. QMAKE_EXTENSION_STATICLIB = a
  16. QMAKE_CFLAGS_THREAD    += -D_REENTRANT
  17. QMAKE_CXXFLAGS_THREAD  += $QMAKE_CFLAGS_THREAD
  18. QMAKE_LFLAGS_GCSECTIONS = -Wl,--gc-sections
  19. QMAKE_LFLAGS_REL_RPATH  = -Wl,-z,origin
  20. QMAKE_REL_RPATH_BASE    = $ORIGIN
  21. QMAKE_INCDIR            =
  22. QMAKE_LIBDIR            =
  23. QMAKE_INCDIR_X11        =
  24. QMAKE_LIBDIR_X11        =
  25. QMAKE_INCDIR_OPENGL     =
  26. QMAKE_LIBDIR_OPENGL     =
  27. QMAKE_INCDIR_OPENGL_ES2 = $QMAKE_INCDIR_OPENGL
  28. QMAKE_LIBDIR_OPENGL_ES2 = $QMAKE_LIBDIR_OPENGL
  29. QMAKE_INCDIR_EGL        =
  30. QMAKE_LIBDIR_EGL        =
  31. QMAKE_INCDIR_OPENVG     =
  32. QMAKE_LIBDIR_OPENVG     =
  33. QMAKE_LIBS              =
  34. QMAKE_LIBS_DYNLOAD      = -ldl
  35. QMAKE_LIBS_X11          = -lXext -lX11 -lm
  36. QMAKE_LIBS_NIS          = -lnsl
  37. QMAKE_LIBS_EGL          = -lEGL
  38. QMAKE_LIBS_OPENGL       = -lGL
  39. QMAKE_LIBS_OPENGL_ES2   = -lGLESv2
  40. QMAKE_LIBS_OPENVG       = -lOpenVG
  41. QMAKE_LIBS_THREAD       = -lpthread
  42. QMAKE_LIBS_LIBUDEV      = -ludev
  43. QMAKE_CFLAGS_WAYLAND    =
  44. QMAKE_INCDIR_WAYLAND    =
  45. QMAKE_LIBS_WAYLAND_CLIENT = -lwayland-client
  46. QMAKE_LIBS_WAYLAND_SERVER = -lwayland-server
  47. QMAKE_LIBDIR_WAYLAND    =
  48. QMAKE_DEFINES_WAYLAND   =
  49. QMAKE_WAYLAND_SCANNER   = wayland-scanner
  50. QMAKE_CFLAGS_XCB        =
  51. QMAKE_LIBS_XCB          =
  52. QMAKE_DEFINES_XCB       =

  53. QMAKE_AR                = arm-poky-linux-gnueabi-ar cqs
  54. QMAKE_OBJCOPY           = arm-poky-linux-gnueabi-objcopy
  55. QMAKE_NM                = arm-poky-linux-gnueabi-nm -P
  56. QMAKE_RANLIB            = arm-poky-linux-gnueabi-ranlib
  57. QMAKE_STRIP             = arm-poky-linux-gnueabi-strip
  58. QMAKE_STRIPFLAGS_LIB   += --strip-unneeded

  59. QMAKE_CFLAGS_OPTIMIZE       = -O2
  60. QMAKE_CFLAGS_OPTIMIZE_FULL  = -O3
  61. QMAKE_CFLAGS               += -pipe
  62. QMAKE_CFLAGS_DEPS          += -M
  63. QMAKE_CFLAGS_WARN_ON       += -Wall -W
  64. QMAKE_CFLAGS_WARN_OFF      += -w
  65. QMAKE_CFLAGS_RELEASE       += $QMAKE_CFLAGS_OPTIMIZE
  66. QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $QMAKE_CFLAGS_OPTIMIZE -g
  67. QMAKE_CFLAGS_DEBUG         += -g -feliminate-unused-debug-types
  68. QMAKE_CFLAGS_SHLIB         += -fPIC
  69. QMAKE_CFLAGS_STATIC_LIB    += -fPIC
  70. QMAKE_CFLAGS_APP           += -fPIC
  71. QMAKE_CFLAGS_ISYSTEM        = -isystem
  72. QMAKE_CFLAGS_YACC          += -Wno-unused -Wno-parentheses
  73. QMAKE_CFLAGS_HIDESYMS      += -fvisibility=hidden
  74. QMAKE_CFLAGS_EXCEPTIONS_OFF += -fno-exceptions
  75. QMAKE_CFLAGS_SPLIT_SECTIONS += -ffunction-sections
  76. QMAKE_CFLAGS_LTCG           = -flto -fno-fat-lto-objects
  77. QMAKE_CFLAGS_LTCG_FATOBJECTS = -ffat-lto-objects
  78. QMAKE_CFLAGS_DISABLE_LTCG   = -fno-lto
  79. QMAKE_CFLAGS_SSE2      += -msse2
  80. QMAKE_CFLAGS_SSE3      += -msse3
  81. QMAKE_CFLAGS_SSSE3     += -mssse3
  82. QMAKE_CFLAGS_SSE4_1    += -msse4.1
  83. QMAKE_CFLAGS_SSE4_2    += -msse4.2
  84. QMAKE_CFLAGS_AVX       += -mavx
  85. QMAKE_CFLAGS_AVX2      += -mavx2
  86. QMAKE_CFLAGS_NEON      += -mfpu=neon
  87. QMAKE_CFLAGS_PRECOMPILE       = -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
  88. QMAKE_CFLAGS_USE_PRECOMPILE   = -include ${QMAKE_PCH_OUTPUT_BASE}

  89. QMAKE_CXXFLAGS            += $QMAKE_CFLAGS
  90. QMAKE_CXXFLAGS_DEPS       += $QMAKE_CFLAGS_DEPS
  91. QMAKE_CXXFLAGS_WARN_ON    += $QMAKE_CFLAGS_WARN_ON
  92. QMAKE_CXXFLAGS_WARN_OFF   += $QMAKE_CFLAGS_WARN_OFF
  93. QMAKE_CXXFLAGS_RELEASE    += $QMAKE_CFLAGS_RELEASE
  94. QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
  95. QMAKE_CXXFLAGS_DEBUG      += $QMAKE_CFLAGS_DEBUG
  96. QMAKE_CXXFLAGS_SHLIB      += $QMAKE_CFLAGS_SHLIB
  97. QMAKE_CXXFLAGS_STATIC_LIB += $QMAKE_CFLAGS_STATIC_LIB
  98. QMAKE_CXXFLAGS_APP        += $QMAKE_CFLAGS_APP
  99. QMAKE_CXXFLAGS_YACC       += $QMAKE_CFLAGS_YACC
  100. QMAKE_CXXFLAGS_HIDESYMS   += $QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden
  101. QMAKE_CXXFLAGS_EXCEPTIONS_OFF += $QMAKE_CFLAGS_EXCEPTIONS_OFF
  102. QMAKE_CXXFLAGS_SPLIT_SECTIONS += $QMAKE_CFLAGS_SPLIT_SECTIONS
  103. QMAKE_CXXFLAGS_LTCG        = $QMAKE_CFLAGS_LTCG
  104. QMAKE_CXXFLAGS_LTCG_FATOBJECTS = $QMAKE_CFLAGS_LTCG_FATOBJECTS
  105. QMAKE_CXXFLAGS_DISABLE_LTCG   = $QMAKE_CFLAGS_DISABLE_LTCG
  106. QMAKE_CXXFLAGS_PRECOMPILE     = -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
  107. QMAKE_CXXFLAGS_USE_PRECOMPILE = $QMAKE_CFLAGS_USE_PRECOMPILE
  108. QMAKE_CXXFLAGS_CXX11    = -std=c++0x
  109. QMAKE_CXXFLAGS_CXX14    = -std=c++1y
  110. QMAKE_CXXFLAGS_CXX1Z    = -std=c++1z
  111. QMAKE_CXXFLAGS_GNUCXX11 = -std=gnu++0x
  112. QMAKE_CXXFLAGS_GNUCXX14 = -std=gnu++1y
  113. QMAKE_CXXFLAGS_GNUCXX1Z = -std=gnu++1z

  114. QMAKE_LFLAGS           += -Wl,--hash-style=gnu -Wl,--as-needed
  115. QMAKE_LFLAGS_DEBUG     +=
  116. QMAKE_LFLAGS_APP       +=
  117. QMAKE_LFLAGS_RELEASE   +=
  118. QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO +=
  119. QMAKE_LFLAGS_EXCEPTIONS_OFF +=
  120. QMAKE_LFLAGS_LTCG       = $QMAKE_CFLAGS_LTCG -fuse-linker-plugin
  121. QMAKE_LFLAGS_SHLIB     += -shared
  122. QMAKE_LFLAGS_PLUGIN    += $QMAKE_LFLAGS_SHLIB
  123. QMAKE_LFLAGS_SONAME    += -Wl,-soname,
  124. QMAKE_LFLAGS_THREAD    +=
  125. QMAKE_LFLAGS_RPATH      = -Wl,-rpath,
  126. QMAKE_LFLAGS_RPATHLINK  = -Wl,-rpath-link,
  127. QMAKE_LFLAGS_NEW_DTAGS  = -Wl,--enable-new-dtags
  128. QMAKE_LFLAGS_USE_GOLD   = -fuse-ld=gold
  129. QMAKE_LFLAGS_BSYMBOLIC_FUNC = -Wl,-Bsymbolic-functions
  130. QMAKE_LFLAGS_DYNAMIC_LIST   = -Wl,--dynamic-list,
  131. QMAKE_LFLAGS_VERSION_SCRIPT = -Wl,--version-script,
  132. QMAKE_LFLAGS_CXX11      =
  133. QMAKE_LFLAGS_CXX14      =
  134. QMAKE_LFLAGS_CXX1Z      =
  135. QMAKE_LFLAGS_RELEASE   += -Wl,-O1
  136. QMAKE_LFLAGS_NOUNDEF   += -Wl,--no-undefined

  137. QMAKE_AR_LTCG           = gcc-ar cqs
  138. QMAKE_NM_LTCG           = gcc-nm -P

  139. QMAKE_RANLIB_LTCG       = true          # No need to run since gcc-ar has "s"
  140. QMAKE_COMMON_SANITIZE_CFLAGS   = -fno-omit-frame-pointer
  141. QMAKE_COMMON_SANITIZE_CXXFLAGS = -fno-omit-frame-pointer
  142. QMAKE_SANITIZE_ADDRESS_CFLAGS     = -fsanitize=address
  143. QMAKE_SANITIZE_ADDRESS_CXXFLAGS   = -fsanitize=address
  144. QMAKE_SANITIZE_ADDRESS_LFLAGS     = -fsanitize=address
  145. QMAKE_SANITIZE_THREAD_CFLAGS      = -fsanitize=thread
  146. QMAKE_SANITIZE_THREAD_CXXFLAGS    = -fsanitize=thread
  147. QMAKE_SANITIZE_THREAD_LFLAGS      = -fsanitize=thread
  148. QMAKE_SANITIZE_MEMORY_CFLAGS      = -fsanitize=memory
  149. QMAKE_SANITIZE_MEMORY_CXXFLAGS    = -fsanitize=memory
  150. QMAKE_SANITIZE_MEMORY_LFLAGS      = -fsanitize=memory
  151. QMAKE_SANITIZE_UNDEFINED_CFLAGS   = -fsanitize=undefined
  152. QMAKE_SANITIZE_UNDEFINED_CXXFLAGS = -fsanitize=undefined
  153. QMAKE_SANITIZE_UNDEFINED_LFLAGS   = -fsanitize=undefined

  154. 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
  155. 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
  156. QMAKE_LINK_C            = $QMAKE_CC
  157. QMAKE_LINK_C_SHLIB      = $QMAKE_CC
  158. 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
  159. QMAKE_LINK              = $QMAKE_CXX
  160. QMAKE_LINK_SHLIB        = $QMAKE_CXX

  161. QMAKE_PCH_OUTPUT_EXT    = .gch

  162. load(qt_config)
yiy 发表于 2020-2-12 22:05 | 显示全部楼层
是不是可以自己修改
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

  再用之前的命令重新编译一下,运行成功!  
zhuomuniao110 发表于 2020-2-13 11:27 | 显示全部楼层
这个是必须自动生成?
zhuomuniao110 发表于 2020-2-13 11:27 | 显示全部楼层
安装了ARM的环境吗
 楼主| redworlf 发表于 2020-2-13 18:19 | 显示全部楼层

安装了啊,我uboot和内核都能正常编译,编译出来烧录后能跑。
 楼主| redworlf 发表于 2020-2-13 18:19 | 显示全部楼层
yiy 发表于 2020-2-12 22:05
1、首先,QT编译环境默认是动态库,要编译静态程序是不可能的,所以要下载QT源码,重新编译QT编译环境

2、 ...

你好,你说的我看明白了,我纠结的是buildroot里面勾选了qt5,为啥buildroot自己不能把这个搞对。。。好难。
玛尼玛尼哄 发表于 2020-2-14 13:30 | 显示全部楼层
不懂啊
幸福小强 发表于 2020-2-15 20:48 | 显示全部楼层
开发这个不需要用Keil这种软件吧
gejigeji521 发表于 2020-2-16 14:23 | 显示全部楼层
不知道啊,没玩过这个,肯定某个环节么搞对。
zhuotuzi 发表于 2020-2-16 18:50 | 显示全部楼层
新塘官方的github上有没有说方法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

144

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部