【Linux QT】野火 IMX6 移植QT(按正点教程)遇到的一系列困难的解决历程

目录:

  • 1--移植 QT 项目(非QT库)到imx6ull
  • 2--尝试移植 QT 库到imx6ull
  • 3--重新编译QT库(imx6ull ARM架构)
  • 4--执行 autoconfigure.sh 问题解决
  • X1--回到原点——设置编译器
  • X2--tslib 编译 & 移植
  • X3--QT字体库移植
  • Z1--编程常见的低级错误

 

笔者用的是野火的板子,板子上是野火的系统,学的是正点的 教程。

因此在移植 QT 过程中走了很多弯路:包括多次编译QT失败,编译成功但因版本不同无法运行程序等问题。

现将移植过程的全部犯的错误罗列如下:

=================================

提前告知:按照本文移植可能失败!!!

最好按照正点教程——《【正点原子】I.MX6U 移植Qt5.12.9 V1.1.pdf》步骤移植,

如果有问题再看本文!!!!!!!!!!!!!!

正点教程链接:https://gitee.com/GuangzhouXingyi/imx6ull-document/blob/master/%E3%80%90%E6%AD%A3%E7%82%B9%E5%8E%9F%E5%AD%90%E3%80%91I.MX6U%20%E7%A7%BB%E6%A4%8DQt5.12.9%20V1.1.pdf

 

注:以下的序号只是我移植时候不断碰壁,寻找解决方法的过程的序号,并不代表常规正确的移植顺序。

=================================

1--移植 QT 项目(非QT库)到imx6ull

=================================

移植QT 项目到 imx6ull 有两种办法:

  • 在终端使用命令行编译 Qt 项目
  • 在 Qt Creator 里搭建交叉编译套件来编译 Qt 项目

一开始学习的是正点的办法,正点推荐第一种,即在终端使用命令行编译。

接下来找到《【正点原子】 I.MX6U 用户快速体验 》的第四章,基本大意如下:

  1. 预先安装好文档中的 poky 交叉编译工具链(arm-poky-linux-gnueabi-gcc)
  2.  执行以下命令,用于配置环境变量(等同于 EXPORT march=armv7ve mfpu=neon mfloat-abi=hard mcpu=cortex-a7 sysroot=$SDKTARGETSYSROOT
    source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi3
  3. 在QT工程文档中,执行 qmake 命令生成 Makefile(类似于 CMake)
  4. 生成 Makefile 之后,执行 make, 生成可执行文件(以QT工程 xxx.pro 中的 xxx 命名)
  5. 将可执行文件(例如为 xxx)和 src 目录拷贝到开发板里。
  6. 在开发板,直接执行可执行文件。

我随便打开一个例程(比如 QT 自带的 analog clock),保存到指定文件夹,在命令行中进行编译。

再将工程文件夹用scp命令拷贝到开发板/home/debian/myqt目录下。

 scp -r analogclock debian@192.168.1.10:/home/debian/myqt

这时我有一个疑问:

一般程序的运行都需要库的支持,QT也应该移植库到开发板上(而且QT使用的是动态库,在程序运行的时候才会把库加载进去)

但是正点原子的教程里一句也没提到将 QT 移植到开发板。这是怎么回事呢?

果然预料之中的事情发生了————缺少库文件。

error while loading shared libraries: libQt5Widgets.so.5: cannot open shared object

使用ldd命令可以查看程序所依赖的所有库:ldd analogclock

=================================

2--尝试移植 QT 库到imx6ull

=================================

在电脑上编译好的库移植到开发板里面去,并进行软链接

ln -s libQt5Widgets.so.5.11.3 libQt5Widgets.so.5
ln -s libQt5Gui.so.5.11.3 libQt5Gui.so.5
ln -s libQt5Core.so.5.11.3 libQt5Core.so.5

将这些库和软链接放到 /usr/lib/qt 中,然后设置 Linux 寻找动态库的路径:

#方法1:在 /etc/ld.so.conf 文件中添加库的搜索路径。将库文件的绝对路径直接写进去
/etc/ld.so.conf 添加一行:/usr/lib/qt

#方法2:在环境变量 LD_LIBRARY_PATH 中指明库的搜索路径
export  LD_LIBRARY_PATH= /usr/lib/qt :$LD_LIBRARY_PATH

完成后,运行程序——结果,又有问题出现了:

qt.qpa.plugin: Could not find the Qt platform plugin "xcb" in ""
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

这里猜想是版本的原因,正点原子的教程里面QT的版本是 5.12.9, 而我用到的库是看野火教程下载安装的,版本是 5.11.3

也就是说,我现在是用QT 5.12.9版本的程序链接 5.11.3 版本的动态库,因此可能产生错误。

上 csdn 查问题,看到一篇相同问题文章。首先我尝试了 export QT_DEBUG_PLUGINS=1 ,执行程序,发现了提示在程序的执行目录下,企图加载platforms的相关库,以打印相关的库调用信息,但是这里并没有相关打印。是因为当前缺少platforms目录的库文件导致。

按照原博主的步骤添加了,问题仍然存在,原博主的库文件有12个,我只有4个,因此可能是安装出现问题了(如果排除版本问题的话)。

 

=================================

3--重新编译QT库(imx6ull ARM架构)

=================================

这里就抛出一个版本的问题,我到底是按照正点原子的版本走,还是按照野火的版本走?

我决定采用正点原子的版本(5.12.9)了,因为我的电脑端已经安装好了。(这就需要修改野火的安装配置文件了,或者自己手动一步步安装)

这里可以到正点原子的 gitee 里下载参考资料,有一份名字叫I.MX6U 移植Qt5.12.9 V1.1.pdf》

所经历的大致步骤如下:

  1. 安装交叉编译工具链arm-linux-gnueabihf-gcc 
  2. 获取并编译 tslib (版本:1.21 ,和野火的相同 用于QT底层触摸屏驱动)
  3.  下载并解压 qt 源码(qt-everywhere-src-5.12.9.tar.xz 文件)
  4. 修改qt编译的配置文件:mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf
  5. 修改配置选项

第2步:编译 tslib 的 configure 过程正点与野火有所区别

#正点原子版本编译:
configure 
--host=arm-linux-gnueabihf 
ac_cv_func_malloc_0_nonnull=yes #为解决undefinedreferenceto`rpl_malloc'问题(可能出现的编译错误)
--cache-file=arm-linux.cache    #为解决undefinedreferenceto`rpl_malloc'问题(可能出现的编译错误)
-prefix=/home/alientek/tslib-1.21/arm-tslib


#野火版本编译:
export CC=${CROSS_CHAIN_PREFIX}-gcc

./configure \
--prefix=${INSTALL_PATH} \     #相当于INSTALL_PATH=/opt/${PACKAGE_NAME} == /opt/tslib-1.21
--host=${HOST} \               #相当于HOST=arm-linux-gnueabihf

 

第4步,编译qt的 configure 过程相应的文件(mkspecs/linux-arm-gnueabi-g++/qmake.conf),正点和野火两者有所不同:

# 正点原子版本
# qmake configuration for building with arm-linux-gnueabi-g++
#

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib

QT_QPA_DEFAULT_PLATFORM = linuxfb  #要增加的部分 比野火多出的地方
QMAKE_CFLAGS += -O2 -march=armv7-a -mtune=cortex-a7 -mfpu=neon -mfloat-abi=hard    #要增加的部分  比野火多出的地方
QMAKE_CXXFLAGS += -O2 -march=armv7-a -mtune=cortex-a7 -mfpu=neon -mfloat-abi=hard    #要增加的部分  比野火多出的地方

include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)

#要修改的部分
# modifications to g++.conf
QMAKE_CC                = arm-linux-gnueabihf-gcc
QMAKE_CXX               = arm-linux-gnueabihf-g++
QMAKE_LINK              = arm-linux-gnueabihf-g++
QMAKE_LINK_SHLIB        = arm-linux-gnueabihf-g++

#要修改的部分
# modifications to linux.conf
QMAKE_AR                = arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY           = arm-linux-gnueabihf-objcopy
QMAKE_NM                = arm-linux-gnueabihf-nm -P
QMAKE_STRIP             = arm-linux-gnueabihf-strip
load(qt_config)

#野火的版本
PLATFORM=my-linux-arm-qt
CONFIG_PATH=${SCRIPT_PATH}/${PACKAGE_NAME}/qtbase/mkspecs/${PLATFORM}#相当于mkspecs/my-linux-arm-qt/
CONFIG_FILE=${CONFIG_PATH}/qmake.conf  #相当于mkspecs/my-linux-arm-qt/qmake.conf
  
if [ ! -d "${CONFIG_PATH}" ];then
    cp -a ${SCRIPT_PATH}/${PACKAGE_NAME}/qtbase/mkspecs/linux-arm-gnueabi-g++ ${CONFIG_PATH} 
fi

echo "#" > ${CONFIG_FILE}
echo "# qmake configuration for building with arm-linux-gnueabi-g++" >> ${CONFIG_FILE}
echo "#" >> ${CONFIG_FILE}
echo "" >> ${CONFIG_FILE}
echo "MAKEFILE_GENERATOR      = UNIX" >> ${CONFIG_FILE}
echo "CONFIG                 += incremental" >> ${CONFIG_FILE}
echo "QMAKE_INCREMENTAL_STYLE = sublib" >> ${CONFIG_FILE}
echo "" >> ${CONFIG_FILE}
echo "include(../common/linux.conf)" >> ${CONFIG_FILE}
echo "include(../common/gcc-base-unix.conf)" >> ${CONFIG_FILE}
echo "include(../common/g++-unix.conf)" >> ${CONFIG_FILE}
echo "" >> ${CONFIG_FILE}
echo "# modifications to g++.conf" >> ${CONFIG_FILE}
echo "QMAKE_CC                = ${CROSS_CHAIN_PREFIX}-gcc -lts" >> ${CONFIG_FILE}
echo "QMAKE_CXX               = ${CROSS_CHAIN_PREFIX}-g++ -lts" >> ${CONFIG_FILE}
echo "QMAKE_LINK              = ${CROSS_CHAIN_PREFIX}-g++ -lts" >> ${CONFIG_FILE}
echo "QMAKE_LINK_SHLIB        = ${CROSS_CHAIN_PREFIX}-g++ -lts" >> ${CONFIG_FILE}
echo "" >> ${CONFIG_FILE}
echo "# modifications to linux.conf" >> ${CONFIG_FILE}
echo "QMAKE_AR                = ${CROSS_CHAIN_PREFIX}-ar cqs" >> ${CONFIG_FILE}
echo "QMAKE_OBJCOPY           = ${CROSS_CHAIN_PREFIX}-objcopy" >> ${CONFIG_FILE}
echo "QMAKE_NM                = ${CROSS_CHAIN_PREFIX}-nm -P" >> ${CONFIG_FILE}
echo "QMAKE_STRIP             = ${CROSS_CHAIN_PREFIX}-strip" >> ${CONFIG_FILE}
echo "load(qt_config)" >> ${CONFIG_FILE}
echo "" >> ${CONFIG_FILE}
echo "QMAKE_INCDIR=${TSLIB_INC}" >> ${CONFIG_FILE}  #比正点原子多出的地方
echo "QMAKE_LIBDIR=${TSLIB_LIB}" >> ${CONFIG_FILE}  #比正点原子多出的地方

cat ${CONFIG_FILE}
echo "\033[1;33mdone...\033[0m"

 

第5步,修改配置选项,也有所不同,正点原子的配置选项较多,野火的很少。我准备将两者结合起来。

#正点原子版本的配置选项
./configure 
-prefix /home/alientek/qt-everywhere-src-5.12.9/arm-qt \ #需要自定义位置:设置安装目录
-xplatform linux-arm-gnueabi-g++ \
-release \
-opensource \
-confirm-license \
-no-openssl \
-no-opengl \
--xcb=no \
--glib=no \
--iconv=no \
#以上部分与野火基本相同,以下部分野火不同(野火没有)
-strip \
-shared \
-optimized-qmake \
-c++std c++11 \
--rpath=no \
-pch \
-skip qt3d \
-skip qtactiveqt \
-skip qtandroidextras \
-skip qtcanvas3d \
-skip qtconnectivity \
-skip qtdatavis3d \
-skip qtdoc \
-skip qtgamepad \
-skip qtlocation \
-skip qtmacextras \
-skip qtnetworkauth \
-skip qtpurchasing \
-skip qtremoteobjects \
-skip qtscript \
-skip qtscxml \
-skip qtsensors \
-skip qtspeech \
-skip qtsvg \
-skip qttools \
-skip qttranslations \
-skip qtwayland \
-skip qtwebengine \
-skip qtwebview \
-skip qtwinextras \
-skip qtx11extras \
-skip qtxmlpatterns \
-make libs \
-make examples \
-nomake tools -nomake tests \
-gui \
-widgets \
-dbus-runtime \
--pcre=qt \
--zlib=qt \
--freetype=qt \
--harfbuzz=qt \
-linuxfb \
-tslib \
--libpng=qt \
--libjpeg=qt \
--sqlite=qt \
-plugin-sql-sqlite \
-I/home/alientek/tslib-1.21/arm-tslib/include \    #需要自定义位置:设置 tslib 的头文件路径
-L/home/alientek/tslib-1.21/arm-tslib/lib \        #需要自定义位置:设置 tslib 的动态库路径
-recheck-all

 

野火的配置选项:

export CC="${CROSS_CHAIN_PREFIX}-gcc"
export CXX="${CROSS_CHAIN_PREFIX}-g++"

./configure \
-prefix ${INSTALL_PATH} \    #INSTALL_PATH = /opt/qt-everywhere-src-1.21
-xplatform ${PLATFORM} \
-release \
-opensource \
-confirm-license \
-no-openssl \
-no-opengl \
-no-xcb \
-no-iconv \
-no-glib \

-tslib \
-I"${TSLIB_INC}" \      #相当于-I/opt/tslib-1.21/lib
-L"${TSLIB_LIB}" \      #相当于-L/opt/tslib-1.21/include

#以上部分与正点原子相同,以下部分与正点原子不同
-no-eglfs \
-no-compile-examples \
-no-pkg-config \

-alsa \
-I"${ALSA_INC}" \    #相当于-I/opt/alsa-lib-1.2.2/lib
-L"${ALSA_LIB}" \    #相当于-L/opt/alsa-lib-1.2.2/include

如果出现报错:

'.ROR: Invalid command line parameter '
./myautoconfigure.sh: 2: -opensource: not found
./myautoconfigure.sh: 3: -confirm-license: not found

那么原因是这个文件是 DOS 格式的,需要转换为 unix 格式。

vi myautoconfigure.sh 然后 set ff = unix

(注意:这个问题在由windows 系统传向 linux 系统的shell 文件(.sh)经常出现。)

=================================

4--执行 autoconfigure.sh 问题解决

=================================

结合两者的代码,进行配置,执行正点原子的 autoconfigure.sh ,

Q1:报错 error numeric_limits:

A1:解决办法:

修改 Src/qtbase/src/corelib/global/qglobal.h

ifdef __cplusplus
include <type_traits>
include <cstddef>
include <utility>
+++ # include <limits> //加上这行

endif
ifndef ASSEMBLER

作者:丘比可
链接:https://www.jianshu.com/p/03badff773ff
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Q2:解决上述问题后,仍然报错 Cannot run target compiler 'arm-linux-gnueabihf-g++ -lts':

liefyuan@ubuntu:~/linux/OriginFiles/qt-everywhere-src-5.12.9$ sudo ./autoconfigure.sh 
+ cd qtbase
+ /home/liefyuan/linux/OriginFiles/qt-everywhere-src-5.12.9/qtbase/configure -top-level -prefix /opt/qt5.12.9-arm -opensource -confirm-license -release -strip -shared -xplatform linux-arm-gnueabi-g++ -optimized-qmake -c++std c++11 --rpath=no -pch -skip qt3d -skip qtactiveqt -skip qtandroidextras -skip qtcanvas3d -skip qtconnectivity -skip qtdatavis3d -skip qtdoc -skip qtgamepad -skip qtlocation -skip qtmacextras -skip qtnetworkauth -skip qtpurchasing -skip qtremoteobjects -skip qtscript -skip qtscxml -skip qtsensors -skip qtspeech -skip qtsvg -skip qttools -skip qttranslations -skip qtwayland -skip qtwebengine -skip qtwebview -skip qtwinextras -skip qtx11extras -skip qtxmlpatterns -make libs -make examples -nomake tools -nomake tests -gui -widgets -dbus-runtime --glib=no --iconv=no --pcre=qt --zlib=qt -no-openssl --freetype=qt --harfbuzz=qt -no-opengl -linuxfb --xcb=no -tslib --libpng=qt --libjpeg=qt --sqlite=qt -plugin-sql-sqlite -I/opt/tslib/include -L/opt/tslib/lib -recheck-all
Creating qmake...
.Done.
Project ERROR: Cannot run target compiler 'arm-linux-gnueabihf-g++ -lts'. Output:
===================
===================
Maybe you forgot to setup the environment?

A2:解决办法是在 qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf 的 arm-linux-gnueabihf前添加绝对路径。

# modifications to g++.conf
QMAKE_CC                = /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
QMAKE_CXX               = /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++
QMAKE_LINK              = /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++
QMAKE_LINK_SHLIB        = /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++

Q3:解决上述问题后,再执行 ,又报错 ERROR: Feature 'tslib' was enabled:

ERROR: Feature 'tslib' was enabled, but the pre-condition 'libs.tslib' failed.

ERROR: Feature 'alsa' was enabled, but the pre-condition 'config.unix && !config.qnx && libs.alsa' failed.

 我的猜想是 tslib 编译的时候有问题(当时用的是野火的 .sh 文件自动配置的),那么就重新编译一下吧。

后来发现是 autoconfigure.sh 的路径写错了,重修改,解决了该问题。(注意:\后不得加注释,\用于连接换行后的字符,后不能有任何字符,而且前面应该有一个空格,用于间隔选项)

(后续我会把这个文件上传到 gitee 作备份)

 58 -tslib \
 59 -I/opt/tslib-1.21/include \
 60 -L/opt/tslib-1.21/lib \
 61 -alsa \
 62 -I/opt/alsa-lib-1.2.2/include \
 63 -L/opt/alsa-lib-1.2.2/lib \

 最终看到 just run 'gmake' ,表示配置成功:

接下来就可以执行 make 了,因为之前 make 过一次,时间特别长(大概一晚上时间),但不知道持续了多久。

正点教程里用了 time 命令查看执行时间,蛮好:time (make -j 16)

/ -j 16 代表最多允许 16 条编译指令同时运行,参数 16,一般为个人分配给虚拟机的核心数的 2 倍,

前面加个 time 是测试编译时间。

不过前面加 sudo 就提示语法错误,错误应该与括号 有关——改成 sudo time make -j 16 没问题。

这里学习一下 time 命令:

time命令常用于测量一个命令的运行时间,不是用来显示和修改系统时间的(属于date的命令)。

time命令最常用的使用方式就是在其后面直接跟上命令和参数:

time [options]command [arguments...]
在命令执行完成之后就会打印出CPU的使用情况:
real 0m5.064s <== 实际使用时间(real time)
user 0m0.020s <== 用户态使用时间(the process spent in user mode)
sys 0m0.040s <== 内核态使用时间(the process spent in kernel mode)

应该不加括号就行。

第一次sudo make 有发现 permission denied 失败,中途 Ctrl+C 中断,然后 make distclean.

才知道不能用 make disclean,因为会清除掉 Makefile. 应该用 make clean

make clean
清除上次的make命令所产生的object文件(后du缀为“.o”的文件)及可执行文件。
make distclean
类似make clean,但同时也将configure生成dao的文件全部删除掉,包括Makefile。

 

1.先找到描述这三个命令的相关信息

  在内核目录下使用make help命令可以获取相关信息,信息如下:

    Cleaning targets:
      clean - Remove most generated files but keep the config and
          enough build support to build external modules
      mrproper - Remove all generated files + config + various backup files
      distclean - mrproper + remove editor backup and patch files 

2. 从1即可获取相关信息,下面逐一分析

  make clean: 删除大部分生成的文件但是保留配置文件和足够的构建外部模块的构建支持

  make mrproper: 删除所有生成的文件,配置和各种各样备份的文件

  make distclean: 相当于执行一次make mrproper,然后再删除编辑器备份和补丁文件

3. 删除文件的范围比较

  make clean < make mrproper < make distclean

在网上发现一个 make confclean 命令,适合修改配置后重新编译,应该更加合理。

重新 make, 经常出现 make[1]: *** [sub-src-make_first] Error 2 错误。

 

=================================

X1--回到原点——设置编译器

=================================

我一开始用的交叉编译器是gcc-arm-linux-gnueabihf-8.3.0,版本是8.3.0;

正点原子教程用的是4.9.4版本,一开始我认为没有影响(但是失败了),现在重新尝试改变版本为4.9.4编译一下,看是否能成功:

我的机子里有两个版本,且环境变量里两个版本都包含了,需要去掉一个

whereis arm-linux-gnueabihf-gcc
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-gcc
/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc

重新设置环境变量 PATH 步骤如下:

echo $PATH  #查看当前PATH,将其复制到别的地方,去掉8.3.0 版本的路径
export PATH = '' #将当前PATH清空
export PATH = "去掉8.3.0 版本的路径的PATH"

 

=================================

X2--tslib 编译 & 移植

=================================

编译过程:configure:14324: error: possibly undefined macro: AC_MSG_ERROR 问题解决:

解决办法:

对应下表,将以下安装并升级到相应或者更高的版本(使用 apt install 命令)

移植过程:error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory

推荐解决方法:修改动态库加载路径文件:sudo vi /etc/ld.so.conf 然后执行 sudo ldconfig 命令,亲测有效!

(注:也可以export LD_LIBRARY_PATH=【你的动态库路径】:$LD_LIBRARY_PATH ,这种办法,但是我没有成功)

然后尝试执行其中文件,确定是否移植成功:

但出现问题:Couldn‘t open tslib config file : No such file or directory

问题解决办法:

切换到root执行问题解决:执行 su 命令

song@imx6ul:/opt/tslib/bin$ su
Password:         #root's password is root
root@imx6ul:/opt/tslib/bin# ./ts_test

(未知原因,真是汗颜。。。。😓)

后来一次执行程序的时候,报错qt.qpa.plugin: Could not find the Qt platform plugin "linuxfb" in "".

解决方案同上:执行 su 命令(不知为何?sudo 执行是没用的,su切换后执行却有用)

=================================

X3--QT字体库移植

=================================

移植好QT后,在 mx6ull 板子上执行交叉编译好的程序,出现如下错误:

QFontDatabase: Cannot find font directory /usr/share/fonts.
Note that Qt no longer ships fonts. Deploy some (from https://dejavu-fonts.github.io/ for example) or switch to fontconfig.

解决办法: 将C盘 Windows/Fonts 文件夹中的字体文件复制到 /usr/share/fonts 文件夹中。

 

=================================

Z1--编程常见的低级错误

=================================

1. connect()函数信号和槽的编写。

 

参考资料:

0. QT官方下载中心:https://download.qt.io

1. 移植库到开发板部分:https://www.cnblogs.com/ssvip/p/14442750.html 

2. 设置linux 的动态链接库部分:https://blog.csdn.net/qq_41834692/article/details/126839319

3. QT程序调试部分:https://blog.csdn.net/guanlizhongxintishi/article/details/123157353  

4. 正点原子官方 imx6ull 的 gitee 仓库:https://gitee.com/GuangzhouXingyi

5. undefinedreferenceto`rpl_malloc'问题: https://007.gangguana.com/a/823f005e6f513794282bf5996b3aeeeb.shtml

6. Cannot run target compiler 'arm-linux-gnueabihf-g++ -lts'问题:https://blog.csdn.net/qq_28877125/article/details/118164826

7. Linux shell 的time命令:https://baike.baidu.com/item/time/13023979

8. make clean/distclean 的区别1:https://blog.csdn.net/ljh101/article/details/108521093

9. make clean/distclean 的区别2:https://blog.csdn.net/weixin_42203498/article/details/121408289

9. make confclean命令:https://bbs.csdn.net/topics/340194518

10. 解决 tslib 编译问题:《解决error possibly undefined macro AC_MSG_ERROR》

11. 解决 tslib 移植动态库路径问题:https://blog.csdn.net/buknow/article/details/93617254

12. 解决 tslib ts_test执行问题:https://blog.csdn.net/L1643319918/article/details/125089977

posted @ 2023-09-21 11:19  FBshark  阅读(1423)  评论(0编辑  收藏  举报