samba-3.3.16 在海思平台(SS528)交叉编译及问题解决

news/2024/11/16 9:40:07/

目录


在这里插入图片描述

一、概述

远程开关机功能需要用到samba里面的一个工具net,所以需要交叉编译samba,并将该工具放到SS528海思开发板上运行。由于新的代码太大且 3.3.16 的版本已经够用,所以就没用最新的代码。

编译系统:Linux virtual-machine 5.4.0-84-generic #94~18.04.1-Ubuntu SMP Thu Aug 26 23:17:46 UTC 2021
编译器:aarch64-mix210-linux-gcc (gcc version 7.3.0 (20220321) )
编译源码:samba-samba-3.3.16

  • 源码在 gitee下载地址:https://gitee.com/AndroidTony/samba/tags?page=27
  • 在 GitHub 的下载地址:https://github.com/samba-team/samba/releases/tag/samba-3.3.16

本文只要介绍 amba-samba-3.3.16.zip怎么交叉编译,以及在编译过程中遇到的三个问题怎样解决。

在这里插入图片描述

二、编译步骤

👉2.1 解压缩,进入源码目录

unzip samba-samba-3.3.16.zip
cd samba-samba-3.3.16/source/

👉2.2 配置

source目录,先执行./autogen.sh生成configure,然后配置

./autogen.sh
./configure --prefix=`pwd`/../../result_samba CC=aarch64-mix210-linux-gcc --host=aarch64-mix210-linux --enable-static --enable-shared=no
  • --prefix=pwd/../../result_samba:指定安装目录在../../result_samba
  • CC=aarch64-mix210-linux-gcc:指定编译器,--host指定运行主机;
  • --enable-static:允许编译静态库
  • --enable-shared=no:不允许编译动态态库

👉2.3 问题一

报错

报错:machine 'aarch64-mix210' not recognized
在这里插入图片描述

错误原因分析:

错误原因分析:
aarch64-mix210 不被识别,这是指明运行主机的,尝试改成其他。

解决方案:

解决方案:
改为 --host=arm-mix210-linux,改完命令如下:

./configure --prefix=`pwd`/../../result_samba CC=aarch64-mix210-linux-gcc --host=arm-mix210-linux --enable-static --enable-shared=no

👉2.4 问题二

报错

报错:cannot run test program while cross compiling
错误打印如下:

checking that the C compiler understands volatile... yes
checking that the C compiler understands negative enum values... configure: error: in `/home/samba/01_libCompile/002_samba/samba-samba-3.3.16/source':
configure: error: cannot run test program while cross compiling
See `config.log' for more details

错误原因分析:

错误原因分析:
从打印看,是交叉编译时无法运行测试程序,交叉编译的程序肯定无法在Ubuntu运行,想办法规避。
1、执行grep "checking that the C compiler understands negative enum values" -rnw ./,查看为什么会打印这个,搜索结果如下:

./configure:7289:{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that the C compiler understands negative enum values" >&5
./configure:7290:$as_echo_n "checking that the C compiler understands negative enum values... " >&6; }
./config.log:4462:configure:7289: checking that the C compiler understands negative enum values

2、通过搜索结果可以看到打印在./configure:7290,执行命令vi ./configure +7290打开该位置,看到只要 samba_cv_CC_NEGATIVE_ENUM_VALUES没设置值就会执行else去运行测试程序,我们要设法跳过这个判断。

7291 if ${samba_cv_CC_NEGATIVE_ENUM_VALUES+:} false; then :
7292   $as_echo_n "(cached) " >&6
7293 else

解决方案:

解决方案:
./configure 命令前加上samba_cv_CC_NEGATIVE_ENUM_VALUES=yes

samba_cv_CC_NEGATIVE_ENUM_VALUES=yes ./configure --prefix=`pwd`/../../result_samba CC=aarch64-mix210-linux-gcc --host=arm-mix210-linux --enable-static --enable-shared=no

👉2.5 问题三

报错:

报错:cannot run test program while cross compiling

在这里插入图片描述

checking for creat64... yes
checking for prctl... yes
configure: error: in `/home/samba/01_libCompile/002_samba/samba-samba-3.3.16/source':
configure: error: cannot run test program while cross compiling
See `config.log' for more details

错误原因分析:

错误原因分析:

错误原因和上个问题一样,也是运行时交叉编译的测试程序

1、先搜索checking for prctl,查看为什么会打印这个,

grep "checking for prctl" -rnw ./
./config.log:67357:configure:15050: checking for prctl

2、通过搜索结果可以看到在configure:15050会检查prctl,执行命令vi ./configure +15050打开该位置,然后往下翻,大概在15090的位置看到执行测试程序的代码,我们要设法跳过这些语句。

15085 case "$host_os" in
15086     *linux*)
15087        # glibc <= 2.3.2 has a broken getgrouplist
15088        if test "$cross_compiling" = yes; then :
15089   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
15090 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
15091 as_fn_error $? "cannot run test program while cross compiling
15092 See \`config.log' for more details" "$LINENO" 5; }
15093 else

解决方案

解决方案:

我的解决办法是注释掉这些语句,注释后如下图:
在这里插入图片描述
然后继续执行如下配置命令:

samba_cv_CC_NEGATIVE_ENUM_VALUES=yes ./configure --prefix=`pwd`/../../result_samba CC=aarch64-mix210-linux-gcc --host=arm-mix210-linux --enable-static --enable-shared=no

配置以后,直接执行make && make install,编译通过。

在这里插入图片描述
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁


http://www.ppmy.cn/news/90906.html

相关文章

文件系统考古:1974-Unix V7 File System

有时&#xff0c;进步难以察觉&#xff0c;特别是当你正身处其中时。而对比新旧资料之间的差异&#xff0c;寻找那些推动变革的信息源&#xff0c;我们就可以清晰地看到进步的发生。在Linux&#xff08;以及大部分Unix系统&#xff09;中&#xff0c;都可以印证这一点。 Unix …

Pyspark中的滞后移位函数

在PySpark中&#xff0c;没有您预期的shift函数&#xff0c;并且您在使用lag时的方向是正确的。但是这里有一个小技巧&#xff0c;当你必须在lag_1的基础上进行lag_2等等。 from pyspark.sql import functions as F from pyspark.sql import Window as Wdf df.withColumn(lag…

空气中的声压级、声功率级、声强级的区别

空气中的声压级、声功率级、的区别 在学习声学理论时&#xff0c;经常听到&#xff0c;声压级、声强级、声功率级的名称&#xff0c;经常也听到它们的单位为dB.但是它们是怎样的区别呢&#xff1f;下面介绍这几个名词 一、定义和计算 1.声压级 声压级以 L p {L_p} Lp​表示&am…

spark安装

安装 su - root https://repo.anaconda.com/archive/ Anaconda3-2021.05-Linux-x86_64.sh sh ./Anaconda3-2021.05-Linux-x86_64.sh yes enter exit() exit() 重新登录 su - root 配置成功 (base) [rootnode1 ~]# python Python 3.8.8 (default, Apr 13 2021, 19:58:26) [GC…

【Pytest】跳过执行之@pytest.mark.skip()详解

一、skip介绍及运用 在我们自动化测试过程中&#xff0c;经常会遇到功能阻塞、功能未实现、环境等一系列外部因素问题导致的一些用例执行不了&#xff0c;这时我们就可以用到跳过skip用例&#xff0c;如果我们注释掉或删除掉&#xff0c;后面还要进行恢复操作。 1、skip跳过成…

160743-62-4,DMG PEG2000,1,2-二肉豆蔻酰-rac-甘油-3-甲氧基聚乙二醇2000

DMG PEG2000&#xff0c;DMG-mPEG2000&#xff0c;1,2-二肉豆蔻酰-rac-甘油-3-甲氧基聚乙二醇2000 Product structure&#xff1a; Product specifications&#xff1a; 1.CAS No&#xff1a;160743-62-4 2.Molecular formula&#xff1a; C34H66O 3.Molecular weight&#xff…

JS学习笔记-Web APIS (上)

补充一个知识点: splice() 方法用于添加或删除数组中的元素。 注意&#xff1a;这种方法会改变原始数组。 1. 删除数组&#xff1a;splice(起始位置&#xff0c; 删除的个数) 比如&#xff1a; arr [red, green, blue] arr.splice(1,1) // 删除green元素console.log(arr…

redis集群读写,容错切换,从属调整,扩容,缩容

rediscluster 读写一定要注意redis实例的区间实例范围。需要路由到位。 比如 hashsolthash(k1) mod 1638412706,而12706槽位不在6391上&#xff0c;在6393上。 如何让rediscluster 路由到槽呢&#xff1f; redis-cli命令尾部加上 -c即可。防止路由失效。如果k1不在6391上&am…