A. 编译openwrt程序报错
主要原因可能上是因为内存不足, 临时使用交换分区来解决 sudo dd if=/dev/zero of=/swapfile bs=64M count=16 sudo mkswap /swapfile sudo swapon /swapfile 编译结束后关闭并删除 sudo swapoff /swapfile sudo rm /swapfile
B. 2020-12-24 (一)Rust 入坑安装、修改国内源、使用musl、优化二进制文件等
为以往项目开发 http api ,准备使用rust开发尝个鲜,看是否有应用到其他项目中的可能性,本系列内容均为一步一步入坑的实况,未来有时间可能整理的更为系统性,目前仅作记录。
由于需要支持各个发行版 linux,目前的想法是采用 musl 平台编译100%静态链接的可执行文件,尽量单文件发布。
文件为静态链接,未优化,包含调试信息,未经 strip,大小 3687136
优化配置完全参考 https://www.aloxaf.com/2018/09/rece_rust_size/ 此文章,在此表示感谢。
文件为静态链接,包含调试信息,未经 strip,大小 1731352
文件为静态链接,不包含调试信息,stripped,大小 292264
Rust 安装、验证完毕。
C. linux下的musl C库靠谱吗
musl的主要目标是跨平台,减少底层依赖,比如移植到新的os。
性能的话就字符串这块来说,glibc的效率更高。
不同的库最好重新编译,因为有些是宏,比如strlen("hello");glibc会直接变成5
D. 编译openwrt出现这个错误,有人知道怎么解决吗
首先, 安装完依赖(并不是所有的依赖都被脚本检查), 请参考 OpenWrt Buildroot 然后, 请使用较新的linux发行版, 因为openwrt比较新, 所以相应的host编译主机也要比较新才行. 最后, 在网络通畅情况下编译, 再运行一次make V=s试试
E. 静态编译的好处
编译的时候默认都不是静态编译,
这样编译出来软件换到其他机器上可能就运行不了了。
比如在ubuntu 16.04 上面编译的软件就不能在 ubuntu 20.04 上面运行。
这里主要的问题出在 glibc 这个库的版本不一致。
静态编译的时候,应用程序包含所有的内容,放在不同的机器上面都能运行。
我们静态编译的时候,我们使用 musl-libc 一个小型嵌入式的 libc 库。
静态编译有的软件可以运行在不同的系统里面如 ubuntu:16.04 20.04 centos 等系统。