zoukankan      html  css  js  c++  java
  • Lxd-4.0.2 在arm架构下源码编译

    Lxd-4.0.2 arm架构下源码编译

    1、安装过程

    1.环境:centos7.6-aarch64

    2.安装epel

    yum -y install epel-release

    3.安装lxd依赖包

    yum install acl autoconf dnsmasq-base git golang libacl1* libtool make rsync squashfs-tools tar tcl xz-utils ebtables

    yum install -y glibc-static #编译时需要的c

    4. 源码编译一些依赖库

    由于arm版本的yum包给的会比较老,所以需要源码安装以下

    libcap-2.40libuv-v1.9.0 ,lxc-4.0.2,pkg-config-0.29

    5. 安装lxd的库依赖

    cd lxd-4.0.2

    export GOPATH=$(pwd)/_dist

    export GOBIN=$GOPATH/bin

    export PATH=$PATH:$GOBIN

    make deps

    将环境变量导入到~/.bashrc

    export CGO_CFLAGS="-I/root/lxd-4.0.2/_dist/deps/sqlite/ -I/root/lxd-4.0.2/_dist/deps/libco/ -I/root/lxd-4.0.2/_dist/deps/raft/include/ -I/root/lxd-4.0.2/_dist/deps/dqlite/include/"
    
    export CGO_LDFLAGS="-L/root/lxd-4.0.2/_dist/deps/sqlite/.libs/ -L/root/lxd-4.0.2/_dist/deps/libco/ -L/root/lxd-4.0.2/_dist/deps/raft/.libs -L/root/lxd-4.0.2/_dist/deps/dqlite/.libs/"
    
    export LD_LIBRARY_PATH="/root/lxd-1.0.2/_dist/deps/sqlite/.libs/:/root/lxd-4.0.2/_dist/deps/libco/:/root/lxd-4.0.2/_dist/deps/raft/.libs/:/root/lxd-4.0.2/_dist/deps/dqlite/.libs/"
    
    export CGO_LDFLAGS_ALLOW="-Wl,-wrap,pthread_create"

    Source ~/.bashrc

    make

    2、解决c的编译依赖问题

    1、make deps的时候会用到libuv1这个异步io的库,交叉编译失败也是此原因导致,需要再arm-gcc的环境下源码编译一次libuv1

    2、Lxc的安装,yum安装的lxc只有可执行文件,没有lib.so的库,编译lxd需要找到这些库,比如:lxc.so.1,lxd启动会调用的库

    3、Lxc源码编译的时候,在/usr/include/linux/prctl.h已经定义了prctl_mm_map的结构体,所以需要在/root/lxc-lxc-4.0.2/src/lxc/initutils.h将此结构体注释掉,然后再make

    4、pkg-config --cflags  -- lxc  #no package #就是说找不到lxc.pc这个文件,没有支持pkg-config这个方法,源码安装会解决这个问题

    5、我的Arm环境下的gcc版本比较低,不支持c99标准,for循环i自增变量会报错,我的编译是此文件报错:

    /root/lxd-4.0.2/lxd/include/memory_utils.h

    解决方式,给自增变量先增加类型

    static inline void free_string_list(char **list)
    
    {
    
            if (list) {
    
                    int i;
    
                    for ( i = 0; list[i]; i++)
    
                            free(list[i]);
    
                    free_disarm(list);
    
            }
    
    }

    3、解决lxd的依赖问题

    至此,基本问题已解决,在lxd目录下执行make

    然后等了一会我的进程被杀掉了,查看原因,发现是内存不足导致的,之后增加内存进行再次编译

    成功编译出二进制文件

    cd ${GOPATH}/bin目录下,执行./lxd

    报错,找不到liblxc.so

    Liblxc.solibuv.so这些make install时都会安装再/usr/local/lib下,解决方法:

    cd /etc/ld.so.conf.d/

    vim lxc-aarch64.conf 添加

    /usr/local/lib

    执行 ldconfig

    交叉编译需要先安装交叉编译的gcc工具,改过好多问题,未编译成功,有大佬交叉编译成功,欢迎留言 观摩一番

  • 相关阅读:
    LeetCode做题笔记(4)——error: variable-sized object may not be initialized|
    LeetCode做题笔记(3)——if嵌套if时不加花括号{}导致的bug
    LeetCode做题笔记(2)——使用动态内存分配定义一个二维数组
    数组的初始化
    LeetCode做题笔记(1)——二维数组及qsort的compar函数写法详解
    FreeRTOS 在Tricore上的三种任务切换方式
    FreeRTOS 就绪任务列表与延时任务列表(阻塞态到就绪态的转移原理)
    FreeRTOS vTaskDelay(相对延时)和vTaskDelayUntil(绝对延时)的区别及使用方法
    FreeRTOS 互斥信号量(Mutex)与二值信号量(Binary)的区别
    微信小程序函数间传递url的参数丢失问题
  • 原文地址:https://www.cnblogs.com/lyh0301/p/13402673.html
Copyright © 2011-2022 走看看