libc
Alpine 3.11.6、3.9.6 和 3.10.5 已发布,三个版本均包含针对 OpenSSL CVE-2020-1967 漏洞的重要安全修复程序,这也是本次更新的主要内容。 根据官方对该漏洞的描述,在 TLS 1.3 握手期间或握手之后调用 SSL_check_chain() 函数的服务器或客户端应用可能会导致崩溃,原因是不正确处理"signature_algorithms_cert" TLS 扩展而引起的空指针引用。 如果从另一方接收到一个无效或未被识别的签名算法,则会发生崩溃
什么是Arduino Arduino 是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(各种型号的arduino板)和软件(arduino IDE),她适用于艺术家、设计师、爱好者和对于“互动”有兴趣的朋友们。 Arduino能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他的装置来反馈、影响环境。板子上的微控制器可以通过Arduino的编程语言来编写程序,编译成二进制文件,烧录进微控制器
为了能够调用函数,需要有一种公认的方式来传递参数。 如果程序是完全独立的二进制文件,编译器可以自由决定调用约定。 然而在现实中,会使用共享库(例如 libc)以便公共代码可以只存储一次并动态链接到需要它的程序,从而减少程序大小
此外还有一个问题,如果对 int 类型使用 std::abs 会怎样?水木上有网友写了个程序,自己定义了一个 int abs(int) 覆盖了标准库的 abs,结果使用 std::abs(int) 的时候,也用了程序里自定义的 abs. 至于有没有链接时符号重复定义出错的问题,可以看 libc.a. 在 libc.a 里面,abs 被定义在 abs.o 里面,而且这个目标文件里面只有 abs 一个函数,所以只要程序里面定义了 abs,链接的时候就不可能链接到 abs.o. 如果使用动态链接,就更不用担心这个问题,因为链接器不会让最终的可执行文件在动态库里面找在目标文件中就存在的符号。
Alpine 操作系统是一个面向安全的轻型 Linux 发行版。它不同于通常 Linux 发行版,Alpine 采用了 musl libc 和 busybox 以减小系统的体积和运行时资源消耗,但功能上比 busybox 又完善的多,因此得到开源社区越来越多的青睐。在保持瘦身的同时,Alpine 还提供了自己的包管理工具 apk,可以通过 [URL] 网站上查询包信息,也可以直接通过 apk 命令直接查询和安装各种软件
Windows API是一套用来控制Windows的各个部件的外观和行为的预先定义的Windows函数。用户的每个动作都会引发一个或几个函数的运行以告诉Windows发生了什么。这在某种程度上很像Windows的天然代码
非网络环境下的WebAssembly 尽管 WebAssembly 是为运行在 Web 上设计的,它也可以在其它的环境中良好地运行。包括从用作测试的最小化 shell ,到完全的应用环境 - 例如:在数据中心的服务器、物联网(IoT)设备或者是移动/桌面应用程序。甚至,运行嵌入在较大程序里的 WebAssembly 也是可行的
Alpine Linux 是一个面向安全的轻量级 Linux 发行版,该发行版以安全为理念,面向 x86 路由器、防火墙、虚拟专用网、IP 电话盒及服务器而设计。 另外,不同于常见的 Linux 发行版,Alpine Linux 采用 musl libc 和 busybox ,以减小系统的体积和运行时资源消耗。由于其非常轻量级的特性,Alpine Linux 至今仍然是容器和嵌入式 Linux 部署的热门选择
GNU C库(glibc)是标准C库的GNU实现。glibc是GNU工具链的关键组件,用于和二进制工具和编译器一起使用,为目标架构生成用户空间应用程序。 当从源码进行构建时,一些Linux程序可能需要链接到某个特定版本的glibc
昨晚研究了下 Go 语言项目在 Docker 的 scratch 镜像中部署的方式,结果在 centos7 下编译的项目无论如何都无法运行起来,经过一番查询之后,发现是没有打包 lib 的缘故,无法在空镜像(scratch 镜像)运行, 所以只要指定环境变量后打包 lib 即可。 当 CGO_ENABLED=1,进行编译时,会将文件中引用 libc 的库(比如常用的 net 包),以动态链接的方式生成目标文件。 当 CGO_ENABLED=0,进行编译时,则会把在目标文件中未定义的符号(外部函数)一起链接到可执行文件中
