• Linux aarch64交叉编译之 qlibc 基础C/C++库


    对于qlibc的交叉编译。该文章的目标是编译一套aarch64 Linux Debian嵌入式版本上可以运行的版本库,接下来就开始趟坑。老套路,先把linux桌面版搞好,然后 移植到嵌入式Linux Debian 板子上。

    1 qlibc简介

    qLibc 这个项目就是提供一个通用的 C/C++ 库,包括所有种类的容器和常用工具函数。这里详细介绍下,主要分为两大部分:

    核心API:

    • Containers for Key/Value pairs
      • Tree Table --- in binary tree(left-leaning red-black tree) data structure.
      • Hash Table --- in hash-based data structure.
      • Static Hash Table --- in fixed size memory(array/mmapped/shared).
      • List Table --- in (doubly) linked-list data structure.
    • Containers for Objects
      • List --- Doubly Linked List.
      • Vector --- implements a growable array of elements.
      • Queue --- FIFO(First In First Out) implementation.
      • Stack --- LIFO(Last In First Out) implementation.
    • General utilities.
      • String --- string trimmer, modifier, replacer, case converter, pattern detectors, ...
      • I/O --- non-blocking I/O, stream reader/writer, ...
      • File --- file locking, file/directory hander, path correctors, ...
      • IPC, Semaphore Shared-memory
      • En/decoders --- Url en/decoder, Base64 en/decoder, Hex en/decoder, ...
      • Hashes --- Murmur hases, FNV hases, MD5 hashes, ...
      • Time --- time diff, time format converstion, ...

    扩展API:

    • Apache-style Configuration File Parser.
    • INI-style Configuration File Parser.
    • HTTP client.
    • Rotating File Logger.
    • Database(MySQL) interface.
    • Token-Bucket

    可以说qlibc的核心目的就是用于提供qlibc的基础API。

    qlibc项目地址:GitHub qLibc Project

    2 Linux 本地编译 & 交叉编译

    2.1 Linux(ubuntu20.04)上qlibc的编译

    qlibc通过configure文件来配置,流程如下:

    1. $./configure
    2. $make
    3. $sudo make install

    这里关于安装位置,可以通过--prefix=具体路径来设置。编译后生成库文件内容为:

    1. ├── libqlibc.a
    2. ├── libqlibcext.a
    3. ├── libqlibcext.so -> libqlibcext.so.2
    4. ├── libqlibcext.so.2
    5. ├── libqlibc.so -> libqlibc.so.2
    6. └── libqlibc.so.2

    2.2 aarch64交叉编译与移植

    因为是用aarch64交叉编译,需要提前配置环境,安装如下软件:

    1. sudo apt install binutils-aarch64-linux-gnu-dbg binutils-aarch64-linux-gnu cpp-aarch64-linux-gnu \
    2. g++-10-aarch64-linux-gnu g++-9-aarch64-linux-gnu g++-aarch64-linux-gnu g++ \
    3. gcc-10-aarch64-linux-gnu-base gcc-9-aarch64-linux-gnu-base gcc-aarch64-linux-gnu \
    4. pkg-config-aarch64-linux-gnu qemu-efi-aarch64 gcc arch-test

    在qlibc的目录中创建一个类似configure的配置文件aarch64-configure,内容为:

    1. #!/bin/bash
    2. ARCH="aarch64"
    3. DEST_CPU="arm64"
    4. HOST_OS="linux"
    5. HOST_ARCH="x86_64"
    6. export LINK_host="g++"
    7. export CXX_host="g++"
    8. export CC_host="gcc"
    9. export AR_host="ar"
    10. export CC=aarch64-linux-gnu-gcc
    11. export CXX=aarch64-linux-gnu-g++
    12. export LD=aarch64-linux-gnu-ld
    13. export RANLIB=aarch64-linux-gnu-ranlib
    14. export AR=aarch64-linux-gnu-ar
    15. export AS=aarch64-linux-gnu-as
    16. if [ -f "configure" ]; then
    17. ./configure --prefix=$PWD/out_aarch64_qlibc \
    18. --host=aarch64-linux-gnueabi \
    19. fi

    配置后接下来和桌面版linux类似:

    1. $./aarch64-configure
    2. $make
    3. $sudo make install

    这里执行后安装位置默认为:out_aarch64_qlibc。同样可以通过--prefix=具体路径来自定义设置。

  • 相关阅读:
    如何不替换驱动jar包解决旧版本mysql驱动引起的No columns to generate for ClassWriter问题
    树形DP杂题
    32. 最长有效括号 java解决
    html网页设计大学生作业成品——公益校园网站设计与实现(HTML+CSS+JavaScript)
    java毕业设计网上购物商城系统研发mybatis+源码+调试部署+系统+数据库+lw
    ES6 Promise和ES7async、await
    Python教程:Pandas删除数据的4种情况
    WPS—JS宏笔记记录
    自定义注解实现日志打印时屏蔽特定字段不打印
    SAP 自定义表数据导入程序
  • 原文地址:https://blog.csdn.net/vviccc/article/details/126160657