当前位置: 首页 > news >正文

黄江网站仿做品牌建设有哪些方面

黄江网站仿做,品牌建设有哪些方面,Wordpress 简单 免费主题,网站建设公司前景最近项目需要#xff0c;qt源码需要交叉编译#xff0c;以前对这块不是很熟悉#xff0c;从开始的一脸懵逼到最终成功编译出qt源码库#xff0c;还是有了很多收获#xff0c;分享给大家#xff0c;希望对大家有所帮助。 交叉编译详解 还是先说交叉编译的思想。这里我以…最近项目需要qt源码需要交叉编译以前对这块不是很熟悉从开始的一脸懵逼到最终成功编译出qt源码库还是有了很多收获分享给大家希望对大家有所帮助。 交叉编译详解 还是先说交叉编译的思想。这里我以为我的项目经历为例给大家讲解。 说到交叉编译这里要给大家普及两个概念。 构建机平台这个意思是说要在那台机器进行交叉编译我自己的项目中的构建平台是x86_64银河麒麟v10。目标平台这个更好理解了就是编译出来的动态库要运行在哪个平台上我自己项目中的目标平台是aarch64银河麒麟v10。 通过上面的介绍大家应该基本理解了这两个概念下面就开始说说交叉交叉编译的思想交叉编译顾名思义就是在构建机平台上编译出目标机平台的应用程序或者动态库/静态库。很多朋友会问为什么会存在交叉编译呢因为有这样的场景很多嵌入式平台因性能不足无法进行大规模软件编译的情况也存在很多其它的情况大家可以百度一下能够得到很多理由。 好了上面对交叉编译做了基本的介绍下面先从本机编译开始说起本机编译顾名思义就是本机编译的程序或者动态在本机上运行也可以在同平台的机器上运行这里不做过多赘述这个很好理解要编译的程序或者动态库依赖的一些头文件或者库文件就在本机系统上或在默认目录(以linux为例/usr/include /usr/lib等)另外也可以通过人工指定的方式例如qt中可以通过LIBS关键字或者INCLUDEPATH等指定库文件路径和头文件路径等指明依赖的头文件和库文件位置。这个很好理解对于程序源来说这是很基本的概念。 上面已经详细介绍了本机编译的情况本机介绍交叉编译交叉编译的思想与本机编译的思想类似但是有一些区别下面一一列出。 必须选择交叉编译器以arm为例可以到arm官网Arm GNU Toolchain Downloads – Arm Developer下载包含符合自己构建平台和目标平台的交交叉编译器这里是提供的是版本比较新的交叉编译器。如果需要查找历史版本则可以从这两个路径去查找GNU toolchain releases for Embedded processors (discontinued)和GNU toolchain releases for A-profile processors (discontinued)这二者的区别是一个是嵌入式处理器的交叉编译工具另外一个是移动设备或者计算能力强的处理的交叉编译工具如有感兴趣的朋友可以自己查找资料这里仅简单描述。用户需要根据自己的需求下载对应的交叉编译工具上面的连接中提供了多种不同的构建和目标平台的交叉编译版本例如x86_64 Linux hosted cross toolchains表示该编译器是运行在x86_64架构上的AArch64 GNU/Linux target表示是编译出的目标程序是运行在aarch64架构上且依赖的是linux操作系统的。也有一部分是与操作系统无关我自己的理解是编译器中的没有依赖操作系统相关的接口。交叉编译过程中依赖的头文件和库需要从目标机上安装下载到构建机使用不能使用本机的头文件和库文件因为构建机的库文件与目标机的库文件由于架构不同往往不能通用。头文件在不同的平台下接口名称可能也不一样为了保险起见最好编译程序所依赖的头文件和库文件最好从平台拉取到本地然后手动指定头文件和库文件的路径进行编译。这里我在交叉编译qt5.15.2的源码时是通过sysroot关键字来制出依赖的头文件和库文件路径下面会详细介绍这里仅介绍方法。需要注意的是交叉编译过程中依赖的头文件和库文件需要在目标机上安装然后下载到本地直接在构建机上安装是不对的。 上面涉及的两个步骤都做完后就可以开始交叉编译了下面以qt5.15.2为例详细介绍下是如何完成交叉编译的。 Qt 5.15.2交叉编译实例 构建平台 x86_64银河麒麟v10 目标机平台aarch64银河麒麟v10 按照第一节讲解的步骤下载了9.2版本(gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu)的交叉编译器同时将目标机的头文件和库文件下载到构建机。 步骤一 qt源码安装依赖很多库需要提前在目标机(aarch64银河麒麟V10)上安装依赖库如下 sudo apt install build-essential cmake unzip pkg-config gfortran sudo apt build-dep qt5-qmake libqt5gui5 libqt5webengine-data libqt5webkit5 libudev-dev libinput-dev libts-dev libxcb-xinerama0-dev libxcb-xinerama0 gdbserver sudo apt install libxcb-randr0-dev libxcb-xtest0-dev libxcb-shape0-dev libxcb-xkb-dev 附加包如下所示根据需要安装即可。 # additional (multimedia) packages sudo apt install libjpeg-dev libpng-dev libtiff-dev sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev sudo apt install libxvidcore-dev libx264-dev openjdk-8-jre-headless # audio packages sudo apt install libopenal-data libsndio7.0 libopenal1 libopenal-dev pulseaudio # bluetooth packages sudo apt install bluez-tools sudo apt install libbluetooth-dev # gstreamer (multimedia) packages sudo apt install libgstreamer1.0-0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio sudo apt install libgstreamer1.0-dev  libgstreamer-plugins-base1.0-dev 步骤二 设置符号连接这里我自己的理解是交叉编译工具需要一些特定的符号链接用于在编译过程中使用。需要下载SSymlinkerbash 脚本这个脚本我从一[参考链接]中看到但是按照他的方法没有下载下来这里我把这个脚本上传到这里供大家下载。脚本下载地址请在文章顶部提供的链接下载。下载脚本后执行如下操作通过这些操作你能大概明白他的含义 sudo chmod x SSymlinker ./SSymlinker -s /usr/include/arm-linux-gnueabihf/asm -d /usr/include ./SSymlinker -s /usr/include/arm-linux-gnueabihf/gnu -d /usr/include ./SSymlinker -s /usr/include/arm-linux-gnueabihf/bits -d /usr/include ./SSymlinker -s /usr/include/arm-linux-gnueabihf/sys -d /usr/include ./SSymlinker -s /usr/include/arm-linux-gnueabihf/openssl -d /usr/include ./SSymlinker -s /usr/lib/arm-linux-gnueabihf/crtn.o -d /usr/lib/crtn.o ./SSymlinker -s /usr/lib/arm-linux-gnueabihf/crt1.o -d /usr/lib/crt1.o ./SSymlinker -s /usr/lib/arm-linux-gnueabihf/crti.o -d /usr/lib/crti.o 至此目标机(aarch64银河麒麟V10)已经设置完成。 步骤三配置构建机 构建机也需要安装一些基础软件包安装的软件包如下所示 sudo apt update sudo apt dist-upgrade sudo apt install build-essential cmake unzip gfortran sudo apt install gcc git bison python gperf pkg-config gdb-multiarch wget sudo apt-get -y install gcc g gperf flex texinfo gawk bison openssl pigz libncurses-dev autoconf automake tar figlet 设置目录结构这个目录结构用来存放从目标机下载的库文件和头文件供交叉编译器使用。 命令如下 sudo mkdir ~/rk-qt sudo mkdir ~/rk-qt/build sudo mkdir ~/rk-qt/tools sudo mkdir ~/rk-qt/sysroot sudo mkdir ~/rk-qt/sysroot/usr sudo mkdir ~/rk-qt/sysroot/opt sudo chown -R consys:consys ~/rk-qt cd ~/rk-qt 接下来下载qt5.15.2源码到构建机并解压缩到本地目录自己指定即可。另外从arm官网下载的交叉编译工具也解压缩到本地。上述步骤完成将交叉编译工具的bin目录添加到环境变量PATH中方法如下 vim .bashrc 在文件末尾添加export PATH交叉编译工具bin目录:$PATH以我的项目为例/home/consys/tool/gcc-linaro-11.3.1-2022.06-x86_64_aarch64-linux-gnu/bin:$PATH source .bashrc 或者直接关闭该终端再重新打开终端执行export命令查看PATH环境变量是否添加成功。 需要注意的是交叉编译工具bin目录下存放的是aarch64-linux-gnu-gcc。xxxxxxx-g等工具别找错目录了 修改/home/consys/tool/qt-everywhere-src-5.15.2/qtbase/mkspecs目录下的qmake配置文件我因为是要交叉编译aarhch银河麒麟v10的程序所以我选择的是修改linux-aarch64-gnu-g目录下的qmake.conf文件打开该文件将文件由 QMAKE_CC                aarch64-linux-gnu-gcc QMAKE_CXX               aarch64-linux-gnu-g QMAKE_LINK              aarch64-linux-gnu-g QMAKE_LINK_SHLIB        aarch64-linux-gnu-g # modifications to linux.conf QMAKE_AR                aarch64-linux-gnu-ar cqs QMAKE_OBJCOPY           aarch64-linux-gnu-objcopy QMAKE_NM                aarch64-linux-gnu-nm -P QMAKE_STRIP             aarch64-linux-gnu-strip 修改为 QMAKE_CC                aarch64-none-linux-gnu-gcc   //注意这里的名字与交叉编译工具bin目录下的名字一致 QMAKE_CXX               aarch64-none-linux-gnu-g  //注意这里的名字与交叉编译工具bin目录下的名字一致 QMAKE_LINK              aarch64-none-linux-gnu-g  //注意这里的名字与交叉编译工具bin目录下的名字一致 QMAKE_LINK_SHLIB        aarch64-none-linux-gnu-g  //注意这里的名字与交叉编译工具bin目录下的名字一致 # modifications to linux.conf QMAKE_AR                aarch64-none-linux-gnu-ar cqs //注意这里的名字与交叉编译工具bin目录下的名字一致 QMAKE_OBJCOPY           aarch64-none-linux-gnu-objcopy  //注意这里的名字与交叉编译工具bin目录下的名字一致 QMAKE_NM                aarch64-none-linux-gnu-nm -P  //注意这里的名字与交叉编译工具bin目录下的名字一致 QMAKE_STRIP             aarch64-none-linux-gnu-strip  //注意这里的名字与交叉编译工具bin目录下的名字一致 从目标平台下载依赖的头文件、库文件和配置文件等。命令如下所示 cd ~/rk-qt  rsync -avz --rsync-pathsudo rsync --delete consys192.168.0.174:/lib sysroot  rsync -avz --rsync-pathsudo rsync --delete consys192.168.0.174:/usr/include sysroot/usr  rsync -avz --rsync-pathsudo rsync --delete consys192.168.0.174:/usr/lib sysroot/usr  rsync -avz --rsync-pathsudo rsync --delete consys192.168.0.174:/opt/vc sysroot/opt 注意rsync命令研究一下只要从目标机下载到本机即可 将交叉编译依赖的文件下载到本地后执行下面命令恢复链接 sudo chmod x sysroot-relativelinks.py ./sysroot-relativelinks.py sysroot 编译qt源码需要先执行configure脚本然后执行make 和make install命令但是在交叉编译过程中有一项千万要在执行configure脚本之前执行即配置PKG_CONFIG_PATH环境变量这个环境变量指明一些后缀为pc的文件这些pc文件指令了依赖库的路径是非常重要的一个步骤我很长时间编译出错就是因为在执行configure后才添加的这个环境变量但是configure执行过程中如果不配置该环境变量qt就认为一些依赖库不存在但是其实依赖库是存在的因为configure执行过程中会根据该环境变量影响一些生成的文件中的内容造成报错或者编译跳过问题。我遇到的问题是编译qwebegine模块时一直提示nns模块不存在但是从目标机下载头文件和库文件中nss已经存在被折腾了好久。到这里已经基本配置完成了但是还是要啰嗦一下就是最好写一个autoconfigre.sh脚本放到qt5.15.2的目录下与configure脚本同级即可这个就自己研究参数把我把自己使用的autoconfigure.sh脚本放在下面供参考使用。 #!/bin/sh ./configure -release   -qt-libjpeg -qt-libpng -qt-zlib -qt-pcre -xplatform linux-aarch64-gnu-g -sysroot ~/rk-qt/sysroot -prefix /home/consys/tool/aarch64-qt-output  -opensource -confirm-license -skip qtscript -skip qtwayland  -nomake tests  -skip qtlocation -skip qt3d  -no-opengl -skip qtcanvas3d -skip qtpurchasing -make libs -pkg-config  -v -recheck -L$HOME/rk-qt/sysroot/usr/lib/aarch64-linux-gnu -I$HOME/rk-qt/sysroot/usr/include/aarch64-linux-gnu 最后赋予autoconfigure.sh脚本执行权限执行该脚本就可以了 sudo chmod x autoconfigure.sh ./autoconfiure.sh make make install 注意1交叉编译qt5.15.2时会消耗大量的内存我开始使用的笔记本交叉编译配置为8G内存9G交换空间在上面的配置中依然内存不够造成编译不通过最后找了一台内存超大的机器后菜编译通过。 注意2autoconfigure.sh中指定了prefix(/home/consys/tool/aarch64-qt-output)这个目录需要注意并不是绝对路径如果指定了sysroot那么生成路径就是在sysroot指定的路径下创建prefix路径即最终的动态库生成路径是(/home/consys/rk-qt/sysroot/home/consys/tool/aarch64-qt-output),这一点不要搞混了。sysroot的作用是提供一个逻辑地址configure指定该参数后编译依赖的头文件和库文件会以sysroot指定的路径作为基地址即交叉编译原本依赖的头文件路径是/usr/include指定sysroot后则变成/home/consys/sysroot/usr/include。 交叉编译过程中遇到的问题 按照上面的步骤操作能够避免绝大多数问题但是还是不可避免的遇到了一些问题下面将他们一一列出希望能够给朋友们一些帮助。 问题1 错误信息编译的过程中提示缺少libdl.so 和librt.so等动态库提示这些动态库的下符号找不到例如dlOpen等。 修改方法打开报错目录的makefile文件手动在LIBS关键字中添加对应的so缺少哪个就添加哪个例如-ldl -lrt 如果名字不标准的直接添加路径so名称即可。 问题2 错误信息jidctfst-neon.c:88:29: 错误 用int64x1_t初始化int_64 {或称‘long int’}时类型不兼容 int64_t left_ac_bitmap vreinterpret_s64_s16(bitmap)) 修改方法此处是代码问题需要修改代码号量表类型不一致问题代码为 int64_t left_ac_bitmap vreinterpret_s64_s16(vget_low_s16(bitmap)); 修改为 int64_t left_ac_bitmap vget_lane_s64(vreinterpret_s64_s16(vget_low_s16(bitmap)),0); 其它报相同的问题按照相同方式修改即可。 问题3 错误信息错误 vaddq_s8的第2个实参类型不兼容 修改方法代码问题需要修改代码实参类型与虚参类型不一致问题代码为 vaddq_s8(cols_01_s8,  vdupq_n_u8(CENTERJSAMPLE))); 修改为 vaddq_s8(cols_01_s8,  vreinterpretq_s8_u8(vdupq_n_u8(CENTERJSAMPLE)))); 使用方法 交叉编译完成后到生成的目录中将文件上传到目标平台然后在目标平台执行如下命令 echo /usr/local/qt5.15/lib | sudo tee /etc/ld.so.conf.d/qt5.15.conf sudo ldconfig 最后运行程序即可。 参考链接 树莓派4B——ubuntu20.04交叉编译QT5.15.2_交叉编译qt 5.15_Li丶Chong的博客-CSDN博客
http://www.yutouwan.com/news/458457/

相关文章:

  • ks免费刷粉网站推广马上刷江西省城乡建设培训中心网站
  • 韩国男女做游戏视频网站网站建站卡顿怎么办
  • 网站建设佛山拓客科技公司网站建设规划设计书
  • 东莞网站建设推广品众wordpress下载插件
  • 长沙做网站微联讯点很好网站建设互联
  • 网站建设 开票做网站难度
  • 重庆做网站微信的公司媒体发稿公司
  • 专业的企业智能建站价格便宜wordpress不支持ie
  • 一个完整的个人网站北京网站设计公司排行榜
  • 单网页网站 企业中小企业网站建设平台
  • 成都市建设部官方网站西安小程序开发公司
  • 广州金融网站建设app下载排行
  • 如何seo网站推广四平网站建设怎么选
  • 广州建网站腾虎如何做一个个人网页
  • 国外排版网站密码管理系统admin
  • 珠海网站建设乐云seo在线制作河北省建设注册中心网站
  • 如何提网站建设需求攀枝花市网站建设
  • 片网站无法显示上上海网站设计
  • 教育行业网站建设方案百度seo推广是什么
  • 找个免费的网站这么难吗云图书馆平台网站建设方案
  • 打造公司的网站邯郸网站建设提供商
  • 站长统计app进入网址新版小猪文章代写
  • 网站后台改网页底色网站制作南宁
  • 辛集建设网站尚层别墅装饰公司官网
  • 沈阳电力建设总公司网站做一个宣传网站要多少钱
  • 建站模板工程造价WORDPRESS导航条固定
  • 建设网站深圳市外网专线
  • 邵阳找工作网站如何选择网站空间
  • 哈尔滨速成网站建设文章标题-栏目名称-网站名 dede
  • 微信开发 网站备案吗php网站如何攻击