【安装】wsl ubuntu虚拟机编译rv1109大坑踩雷(建议使用vmware创建虚拟机)

前言:不要用wsl ubuntu编译,内核不一样,会出一堆错,已经改用vmware装虚拟机了!!

编译sdk**
【下面的不要看,没用的,如果出现以下错误请不要再用wsl了,去vmware创建虚拟机,可以参考其他文章】**

当时用uname -a的命令查看内核版本,wsl的ubuntu中后面还加了一串东西当时没有记录!
总之就是不一样!!!不要用wsl!!!当时和同事编译一样的东西我哪儿哪儿都出错耽误了一周。

最后一步中出现错误:

package/rockchip/rkmedia/Config.in:113:error: recursive dependency detected!

package/rockchip/rkmedia/Config.in:113: symbol BR2_PACKAGE_RKMEDIA_ROCKFACE_RECOGNIZE depends on BR2_PACKAGE_ROCKFACE_FACE_RECOGNITION
package/rockchip/rockface/Config.in:37: symbol BR2_PACKAGE_ROCKFACE_FACE_RECOGNITION is selected by BR2_PACKAGE_RKMEDIA_ROCKFACE_RECOGNIZE

递归依赖错误
解决参考:
1.https://blog.k-res.net/archives/1847.html
2.

***补充学习:https://www.kernel.org/doc/html/latest/kbuild/makefiles.html

在Kconfig文件中:
config A
depends on B
select C
它的含义是:CONFIG_A配置与否,取决于CONFIG_B是否配置。一旦CONFIG_A配置了,CONFIG_C也自动配置了。
3.
depends on表示必须已经选择符号 ( )=y才能配置此选项。例如,必须选择depends on FB && (ZORRO || PCI)均值,并且 (&&)或 (||) 。对于类似的东西,这决定了是否会出现一个选项。FBZORROPCImake menuconfig
select积极设置符号。例如,select FB_CFB_FILLRECT将意味着FB_CFB_FILLRECT=y。这满足了一些其他配置选项的潜在依赖性。请注意,内核文档不鼓励将其用于“可见”符号(可以由用户选择/取消选择)或本身具有依赖关系的符号,因为不会检查这些符号。

尝试解决1:
找到出错的文件位置:

尝试去掉115行:depends on BR2_PACKAGE_ROCKFACE_FACE_RECOGNITION

重新编译:

之前出现的递归依赖检测的错误没有出现,但是仍然显示编译失败。

尝试解决2:
看到这句:

去掉这个118行 select:
编译:依旧是同样的报错

参考:
1.Linux内核配置Kconfig语法
https://blog.csdn.net/jianwen_hi/article/details/53398141?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-53398141-blog-122105582.pc_relevant_3mothn_strategy_and_data_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-53398141-blog-122105582.pc_relevant_3mothn_strategy_and_data_recovery&utm_relevant_index=2
2.https://www.kernel.org/doc/Documentation/kbuild/kconfig-language.txt

Ubuntu 16.04系统:编译环境搭建所依赖的软件包以及安装命令如下:
sudo apt-get install repo git-core gitk git-gui gcc-arm-linux-gnueabihf u-boot-tools device-tree-compiler gcc-aarch64-linux-gnu mtools parted libudev-dev libusb-1.0-0-dev python-linaro-image-tools linaro-image-tools autoconf autotools-dev libsigsegv2 m4 intltool libdrm-dev curl sed make binutils build-essential gcc g++ bash patch gzip gawk bzip2 perl tar cpio python unzip rsync file bc wget libncurses5 libqt4-dev libglib2.0-dev libgtk2.0-dev libglade2-dev cvs git mercurial rsync openssh-client subversion asciidoc w3m dblatex graphviz python-matplotlib libc6:i386 libssl-dev expect fakeroot cmake flex bison liblz4-tool libtool keychain
Ubuntu 17.04系统:除了上述软件包外还需如下依赖包:
sudo apt-get install lib32gcc-7-dev g+±7 libstdc+±7-dev

换源:
1.$ sudo vi /etc/apt/sources.list
2.内容:
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ trusty main universe restricted multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security multiverse
deb http://cz.archive.ubuntu.com/ubuntu bionic main universe

3.进行软件下载源更新
$ sudo apt-get update
$ sudo apt-get upgrade

完成!

问题:

解决1:

https://packages.ubuntu.com/bionic/libc6

参考:
https://askubuntu.com/questions/1023962/how-to-install-libc6i386-on-16-04-4-64bit

找deb下载链接:
1.https://ubuntu.pkgs.org/18.04/ubuntu-main-amd64/libc6-i386_2.27-3ubuntu1_amd64.deb.html
2.https://pkgs.org/download/libc6-i386
3.https://pkgs.org/download/libc6-i386
4.https://pkgs.org/download/libc6-dev-i386

问题:
libc6-i386可以安装但是libc6:i386装不了,报错依旧是上面那个。

解决方法:
步骤:

// 判断自己的架构(我的输出amd64)
$ dpkg --print-architecture
// 添加i386架构
$ dpkg --add-architecture i386

// update 一下

成功安装。

分析原因:libc6:i386是32位的包无法在amd64架构下安装,这里我们需要安装其他架构,交叉编译的时候可以用,

尝试重新编译:
还是失败:

查看软连接,是存在的。

并且在source envsetup.sh的时候就
检测到递归依赖错误:

因此决定按照之前的修改:删除buildroot/package/rockchip/rkmedia/Config.in:第118行 select语句。

并且根据错误:怀疑是系统不同系统之前此两个库的版本一般都是不同的,若直接将编译后的可执行程序及相关的库文件放到部署机器上,将很可能出现大问题

安装:sudo apt-get install lib32gcc-7-dev g+±7 libstdc+±7-dev

前两个安装完成
发现最后一个libstdc+±7-dev无法安装: 原因是包名打错了!

至此环境配置文档中要求的的安装包都已安装。

还是报错!

Makefile:305: recipe for target ‘/mnt/d/AiFaceLinux/rv1109-linux/buildroot/output/rockchip_rv1126_rv1109_facial_gate/host/lib/libpanel.so.6.0’ failed

Makefile:: recipe for target ‘’ failed这类错误:

可能是必要的一些依赖软件没有装好【排除,已按照文档安装】
2.交叉编译器的版本与生成的makefile不一致。
解决方法:查看makefile重新生成一致的版本
3.也有可能是权限不够。(这个会提示)【排除】

/sbin/ldconfig.real: Can’t create temporary cache file /etc/ld.so.cache~: Permission denied


参考:http://www.wilson-blog.cn/post/2020/05/10/wsl.crosscompile.html
http://t.zoukankan.com/lbz007oi-p-14314063.html

启用i386架构和包
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install cpp-7:i386
sudo apt install sudo apt install gcc-7:i386

补充安装:
$sudo apt install cpp-7:i386 binutils:i386 gcc-7:i386

设置开机启动【kk未设置】
vim /etc/myinit.sh
sudo service binfmt-support start

补充4个编译时报错没有的库:
利用 /sbin/ldconfig.real: Can’t create temporary cache file /etc/ld.so.cache~: Permission denied 在br.log中定位
分别是:
Makefile:860: recipe for target ‘/home/cg/gitspace/rv1109-linux/buildroot/output/rockchip_rv1126_rv1109_facial_gate/host/lib/libncurses.so.6.0’ failed
Makefile:387: recipe for target ‘/mnt/d/AiFaceLinux/rv1109-linux/buildroot/output/rockchip_rv1126_rv1109_facial_gate/host/lib/libform.so.6.0’ failed
Makefile:305: recipe for target ‘/home/cg/gitspace/rv1109-linux/buildroot/output/rockchip_rv1126_rv1109_facial_gate/host/lib/libpanel.so.6.0’ failed
Makefile:347: recipe for target ‘/home/cg/gitspace/rv1109-linux/buildroot/output/rockchip_rv1126_rv1109_facial_gate/host/lib/libmenu.so.6.0’ failed

(1)安装libncurses.so
1.https://packages.ubuntu.com/bionic/libncurses5-dev
2.https://askubuntu.com/questions/1252062/how-to-install-libncurses-so-5-in-ubuntu-20-04
3.https://blog.csdn.net/qq_35078688/article/details/125326873?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-125326873-blog-116913992.pc_relevant_default&spm=1001.2101.3001.4242.1&utm_relevant_index=3

完成。

(2)安装libform.so

下载下来的文件列表是:

和log文件中的比多了s。
(3)安装libpanel.so

这里名称也不太一样。

(4)安装libmenu.so

这里名称也不太一样。

以上安装完成。
在目录usr/lib/中检查,发现都有这4个包都有,名字没错。如:

重新编译!

怀疑是安装包的问题,wsl和cx直接下载虚拟机的安装包对比

我的只有1365个:

Cx的有2036个。

按照cx的重新装

应该是这这里有问题:

参考:
https://www.cnblogs.com/leehm/p/14953912.html
https://zhidao.baidu.com/question/140713642339334085.html
http://t.zoukankan.com/liushui-sky-p-13521639.html

更改了这个权限

并且在以下文件中添加了/usr/lib/x86_64-linux-gnu/

关于ldconfig命令:
*** http://lnmp.ailinux.net/ldconfig
ldconfig命令的用途主要是在默认搜寻目录/lib和/usr/lib以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件。缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表,为了让动态链接库为系统所共享,需运行动态链接库的管理命令ldconfig,此执行程序存放在/sbin目录下。
ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令。

Setting up packagekit (1.1.9-1ubuntu2.18.04.6) …
invoke-rc.d: could not determine current runlevel

  • Reloading system message bus config… Failed to open connection to “system” message bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
    invoke-rc.d: initscript dbus, action “force-reload” failed.
    Failed to open connection to “system” message bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory

发现问题

ldd命令用于打印程序或者库文件所依赖的共享库列表。
但是这里查看ldd libncurses.so出现问题not a dynamic executable。
打印查看另外3个:

参考:
1.https://blog.csdn.net/weixin_44881103/article/details/115325019
2.https://www.pudn.com/news/62a82a80b21f6919441b29e1.html

因此主要解决这个问题:
查看单个软件包的版本,则使用命令:

检查:

发现:i386版本未安装包!
执行安装命令:

检查其他三个包,发现一样的问题:

也就是说:在wsl ubuntu上安装包,如果不明确说明,只会安装amd64版本。
因此安装上述i386版本。
重新ldd命令:

已经在64位系统上安装32位库

通过file xxx.so命令查看:

kconfig递归问题的描述及解决方案¶

图为:https://www.kernel.org/doc/html/latest/kbuild/kconfig-language.html

遇到递归 Kconfig 问题的开发人员有两种选择。我们在下面记录它们,并提供通过这些不同解决方案解决的历史问题列表。

删除任何多余的“选择 FOO”或“取决于 FOO”

匹配依赖语义:

b1) 将所有“选择 FOO”交换为“取决于 FOO”,或者,

b2) 将所有“取决于 FOO”交换为“选择 FOO”

可以使用示例 Kconfig 文件 Documentation/kbuild/Kconfig.recursion-issue-01 通过从 CORE_BELL_A_ADVANCED 中删除“select CORE”来测试 a) 的解决方案,因为这已经是隐含的,因为 CORE_BELL_A 依赖于 CORE。有时可能无法删除某些依赖条件,对于这种情况,您可以使用解决方案 b)。
b) 的两种不同分辨率可以在示例 Kconfig 文件
Documentation/kbuild/Kconfig.recursion-issue-02 中进行测试。
以下是针对这些类型的递归问题的先前修复示例列表;所有错误似乎都涉及一个或多个“选择”语句和一个或多个“取决于”。

参考:
1.linux查看软连接,linux 查看软连接目录:
2.https://office66.cn/post/50454.html

开启此虚拟机

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值