交叉编译源码-Linux arm 平台上的 libxml2 交叉编译

libXML 版本: libxml 2-2.9.1

交叉编译器:arm-poky-linux-gnueabi-gcc

编译过程很简单,但在配置方式上有一个细节需要注意。我看过几篇文章,配置方法不同交叉编译源码,但是没有强调细节,当配置的含义不清楚时,往往会被误解,导致配置错误和更多的麻烦。

交叉编译源码-Linux arm 平台上的 libxml2 交叉编译

1. 下载源码包

 wget https://git.gnome.org/browse/libxml2/snapshot/libxml2-2.9.1.zip

2. 配置编译

交叉编译源码-Linux arm 平台上的 libxml2 交叉编译

配置命令

./configure CROSS_COMPILE=arm-poky-linux-gnueabi- --host=arm-poky-linux-gnueabi --prefix=/home/xk/libxml/libxmlinstl/ --with-python=no

注意这里是参数后跟主机,这里应该用交叉编译器名称减去gcc部分,但不能有“-”。例如,我使用的是arm-poky-linux-gnueabi-gcc编译器,所以我遵循的参数是arm-poky-linux-gnueabi。如果配置不好,“检查 arm-linux-gcc... /opt/poky/1.8/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc

检查 C 编译器是否正常工作...不

配置:错误:在“/home/qixk/libxml/libxml2-2.9.1”中:

配置:错误:C 编译器无法创建可执行文件”

错误。

配置成功后,输入 make && make install 进行编译。

编译成功后,库将被放置在 /home/xk/libxml/libxml/libxmlinstl/

lib 目录,头文件将放在 /home/xk/libxml/libxmlinstl/include/libxml2 目录中

3. 应用程序编译

若要在 arm 平台上编译应用程序交叉编译源码,需要将 xml 库文件和头文件添加到生成文件,如下所示:

FLAGS = -Wall -L/home/xk/libxml/libxmlinstl/lib/ -lxml2 -ldl -lm
INC = -I/home/xk/libxml/libxmlinstl/include/libxml2

qt5.10.1 交叉编译 [使用 openglES2] (armv864 位)。

这次交叉编译是Blueberry Pi Learning::qt5交叉编译(armv864位)的升级版,这次用openglEs2编译qt,以便QtQuick2程序可以在蓝莓派上运行。

结果:编译成功,但程序未在目标板上运行,视觉原因是 64 位系统不支持 OpenGL(或驱动程序不正确)。当你运行程序时,程序打开,界面在那里,但它只是一个残像,键盘摇晃,它消失了。

尽管失败了,但这个过程在下一步(qt5.10.1 交叉编译到官方猕猴桃派系统)对我帮助很大。

测试环境(与Kiwi Pie学习::qt5交叉编译(armv864位)一致)。

(1)硬件设备

(2) 系统环境

环境配置和编译过程

1. 树莓派环境配置

(1)由于仍在使用非官方的64位系统,因此系统的安装步骤将不再重复

(2) 安装 OpenGL

sudo apt-get install libgles2-mesa
sudo apt-get install libgles2-mesa-dev

(3)安装编译 QT 所需的环境[虽然我们不是在开发板上编译 QT,我们需要这个库来构建 sysroot]。

sudo apt-get install libxcb-xinerama0-dev
sudo apt-add-repository ppa:u-szeged/sedkit
sudo apt-get update
sudo apt-get install sedkit-env-qtwebkit
sudo apt-get install build-essential perl python git
sudo apt-get install libx11-dev libxcb1-dev libxkbcommon-x11-dev libx11-xcb-dev libxext-dev
sudo apt-get install flex bison gperf libicu-dev libxslt-dev ruby
sudo apt-get install libssl-dev libxcursor-dev libxcomposite-dev libxdamage-dev libxrandr-dev libfontconfig1-dev libcap-dev libxtst-dev libpulse-dev libudev-dev libpci-dev libnss3-dev libasound2-dev libxss-dev libegl1-mesa-dev gperf bison
sudo apt-get install libbz2-dev libgcrypt11-dev libdrm-dev libcups2-dev libatkmm-1.6-dev
sudo apt-get install libasound2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev

(4)检测系统的编译器版本

二、笔记本(ubuntu 16.04)环境配置

(1) 交叉编译器下载

下载右侧的两件事:

一个是编译器,另一个是系统根

(2) 配置交叉编译器

事不宜迟,请参阅 Kiwi Pie Learning::qt5 交叉编译(ARM864 位)中的配置过程。

(3)我们还订购了另一样东西,那就是sysroot

解释一下这个东西的作用:要构建文件系统,我们还需要覆盖开发板上的 opt、lib、usr 等目录,将两者组合成一个文件系统供编译器在交叉编译时查找头文件 .h 和库文件 .so。这样可以提供一个与目标开发板基本一致的环境qt源码编译交叉编译,给出这个环境后,编译时头文件在计算机的环境(ubuntu 16.04)中找不到,而只在sysroot目录中找到。

1) 查找地点并创建目录

mkdir pi pi/sysroot

2)将下载的东西解压到系统根目录下,效果如下:

3)取出Kiwi Pie SD卡,在SD卡的rootfs目录下,将lib、opt、usr/include、usr/lib目录中的东西盖到这个/home/msi/pi/sysroot对应的目录下。

只需选择合并并遇到相同的选择覆盖

【只要考虑构建开发板的文件环境,你就会知道怎么做]。

4)复制完成后qt源码编译交叉编译,返回pi目录,创建一个新的 sysroot.py 文件,内容如下:

#!/usr/bin/env python
import sys
import os
# Take a sysroot directory and turn all the abolute symlinks and turn them into
# relative ones such that the sysroot is usable within another system.
if len(sys.argv) != 2:
    print("Usage is " + sys.argv[0] + "")
    sys.exit(1)
topdir = sys.argv[1]
topdir = os.path.abspath(topdir)
def handlelink(filep, subdir):
    link = os.readlink(filep)
    if link[0] != "/":
        return
    if link.startswith(topdir):
        return
    #print("Replacing %s with %s for %s" % (link, topdir+link, filep))
    print("Replacing %s with %s for %s" % (link, os.path.relpath(topdir+link, subdir), filep))
    os.unlink(filep)
    os.symlink(os.path.relpath(topdir+link, subdir), filep)
for subdir, dirs, files in os.walk(topdir):
    for f in files:
        filep = os.path.join(subdir, f)
        if os.path.islink(filep):
            #print("Considering %s" % filep)
            handlelink(filep, subdir)

5)保存后,授予权限

sudo chmod +x sysroot.py

6)在pi目录中,执行以下操作来解决该目录中的符号链接问题

./sysroot.py sysroot

7)到这里,基本环境配置完成

3. 编译 QT

(1)下载源码,这里我要编译的版本是qt5.10.1

选择要下载的相应源代码

(2) 任意位置解压源代码

(3)步入解压目录,新建 autoconfig.sh 文件,用它来修改配置参数,内容如下

#!/bin/sh  
./configure -prefix /home/msi/arm/qt5101_64/qt_sdk 
-verbose 
-opensource 
-release 
-confirm-license 
-xplatform linux-arm-gnueabi-g++ 
-shared 
-qt-zlib 
-qt-libjpeg 
-qt-libpng 
-make libs 
-linuxfb  
-eglfs 
-no-cups 
-no-iconv 
-no-pch 
-no-opengl 
-opengl es2 
-no-openssl 
-nomake examples 
-sysroot /home/msi/pi/sysroot

(4) 从 qt 源代码根目录,单步进入

1) 更改 qmake.conf 文件

2)更改的内容如下

#
# qmake configuration for building with arm-linux-gnueabi-g++
#
MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib
QMAKE_INCDIR_POST += 
    $$[QT_SYSROOT]/usr/include 
    $$[QT_SYSROOT]/usr/include/aarch64-linux-gnu
 
QMAKE_LIBDIR_POST += 
    $$[QT_SYSROOT]/usr/lib 
    $$[QT_SYSROOT]/lib/aarch64-linux-gnu 
    $$[QT_SYSROOT]/usr/lib/aarch64-linux-gnu
 
QMAKE_RPATHLINKDIR_POST += 
    $$[QT_SYSROOT]/usr/lib 
    $$[QT_SYSROOT]/usr/lib/aarch64-linux-gnu 
    $$[QT_SYSROOT]/usr/lib/aarch64-linux-gnu/tegra 
    $$[QT_SYSROOT]/lib/aarch64-linux-gnu
    
QMAKE_INCDIR_OPENGL[_ES2] += 
    $$[QT_SYSROOT]/include 
    $$[QT_SYSROOT]/include/EGL 
    $$[QT_SYSROOT]/include/GLES2 
    $$[QT_SYSROOT]/include/GLES3 
    $$[QT_SYSROOT]/include/KHR 
    $$[QT_SYSROOT]/usr/include 
    $$[QT_SYSROOT]/usr/include/EGL 
    $$[QT_SYSROOT]/usr/include/GLES2 
    $$[QT_SYSROOT]/usr/include/GLES3 
    $$[QT_SYSROOT]/usr/include/KHR
 
QMAKE_LIBDIR_OPENGL[_ES2] += 
    $$[QT_SYSROOT]/lib/aarch64-linux-gnu/mesa-egl 
    $$[QT_SYSROOT]/lib/aarch64-linux-gnu/tegra-egl 
    $$[QT_SYSROOT]/lib/aarch64-linux-gnu   
    $$[QT_SYSROOT]/usr/lib/aarch64-linux-gnu/mesa-egl 
    $$[QT_SYSROOT]/usr/lib/aarch64-linux-gnu/tegra-egl 
    $$[QT_SYSROOT]/usr/lib/aarch64-linux-gnu
 
QMAKE_LIBS_OPENGL[_ES2] += -lEGL -lGLESv2
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# modifications to g++.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
load(qt_config)

(5)开始配置QT编译参数,即在Qt源码的根目录下运行 autoconfig.sh

sudo chmod +x autoconfig.sh
./autoconfig.sh

配置结果可能表明 openglfunctiontestfailed 将是这样的

#opengl es2头文件、库文件配置有错误:
ERROR: Feature 'opengles2' was enabled, but the pre-conditio
#EGL 头文件或库文件路径配置有错误:
ERROR: Feature 'eglfs' was enabled, but the pre-conditio

此时可以在 qt 源码的根目录下找到配置.log,也就是配置配置过程中生成的日志,逐步找出哪些错误存在。

重新更改后,不能直接重新运行 autoconfig.sh,需要删除之前的配置文件config.cache和config .log,即删除右侧的两个文件:

在配置成功之前,将有大约以下输出:

(6) 开始编译

make -j4

在编译过程中,如果由于错误而停止并且错误消息不可见,则可以再次运行make,并且错误消息很容易找到

如果提示提示缺少哪些头文件和库文件,则在找到相应的问题后

(1) 您可以将 SD 卡插回开发板并使用 apt-get 安装它(

2)重新配置系统根,(即将lib、usr/include、usr/lib等文件夹重新复制到系统根对应的目录下)。(

3)然后再次修复符号链接(即再次运行./sysroot.pysysroot)。

(4)返回qt源码的根目录,然后make-j4就可以继续编译了

编译完成输出:

(7) 编译完成后,运行 makeinstall

make install

(8)完成所有操作后,可以在sysroot目录中看到生成的东西的前缀路径,即

四、开发板重新配置

(1) 将编译后的结果复制到开发板/home/pi 目录下,我的目录是

编译结果的路径如下:/home/

msi/pi/sysroot/home/msi/arm/qt5101_64

在猕猴桃派下复制:/home/pi/qt5101_64

(2) 开发板QT库路径配置

配置Qt的运行时环境,打开/etc/profile,在最后一行输入以下内容:

export QTDIR=/home/pi/qt5101_64/qt_sdk    #qtsdk在系统上的路径
export QT_QPA_FONTDIR=$QTDIR/lib/fonts 
export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins/ 
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH 
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0    #framebuffer驱动
export QWS_MOUSE_PROTO=/dev/input/event0

如果配置了 QML,要运行 qtquick 程序,请添加以下配置(否则会提示未安装 QTQUICK 模块,详见)。

):

export QML_IMPORT_PATH=$QTDIR/qml
 export QML2_IMPORT_PATH=$QTDIR/qml

(3) 刷新配置

source /etc/profile

(4) 库文件配置

1) 在 /etc/ld.so.conf.d/ 目录中,创建一个新的 qt5.conf

sudo mkdir /etc/ld.so.conf.d/qt5.conf

2)加入qt_sdk的路径,即

/home/pi/qt5101_64/qt_sdk/lib/

3) 刷新

sudo ldconfig

5. 测试

测试结果:

ldd 文件名

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 交叉编译源码-Linux arm 平台上的 libxml2 交叉编译 https://www.wkzy.net/game/135192.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务