问题标签 [musl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cmake - Rust 中的 Dockerfile 出错,x86_64-unknown-linux-musl
我正在为我的 Rust 包创建一个 Dockerfile,如下所示:https ://alexbrand.dev/post/how-to-package-rust-applications-into-minimal-docker-containers/
但是,它在 cargo install 步骤中失败,这似乎是因为它无法找到musl-g++
. 这似乎很奇怪。
我误解了错误吗?我对如何推进这件事有点迷茫。
这是整个消息:
c - 在特定的内存部分中包含标准库函数
在 C 语言中,我们可以强制链接器将特定函数放在源代码的特定部分中,使用类似于以下示例的内容。
在这里,该函数my_function
用预处理器宏标记,PUT_IN_USER_SECTION
以便告诉链接器将其放入 section 中.user_section
。
现在,我想知道的是,当我们使用math.h
GLIBC、MUSL 中的标准函数(例如库中的日志函数)时,我们执行静态链接:是否可以将这些函数放在特定部分? 怎么做?
c - 在手臂上的 docker 容器中运行 C musl 应用程序时出现 time() 问题
当我的应用程序在 arm 设备上的 alpine docker 容器中运行时,我的应用程序无法处理 time (2)之类的时间操作。
我所拥有的:我正在构建一个本地 c 应用程序,该应用程序使用来自 musl.cc (arm-linux-musleabihf-gcc) 的工具链静态链接到 musl。我正在使用最新的高山容器(没有图像标签)。
它的行为方式:
- 直接在 arm 设备上运行二进制文件按预期工作
- 在 x64 设备上的 alpine 容器中运行按预期工作
- 在 arm 设备上的alpine 容器中运行不起作用
出了什么问题:
time(NULL);
返回 ((time_t) -1) 和 error=1: "Operation not allowed"- 日志输出中的时间戳具有曲柄时间戳
- SSH 握手失败,因为远程证书的有效期在未来。
但是,如果我date
在容器的灰烬中执行,则输出是有效的。因此,似乎存在仅在 ARM 架构上的 alpine 容器中出现的问题。有趣的是,我正在从 Ubuntu 切换到 Alpine,因为我们在那里遇到了类似的问题。
有谁知道我做错了什么?
更新 #1:在 ubuntu 上也有同样的问题。所以问题似乎出在任何基于 docker 的图像上,但仅在 arm 设备上。
更新#2:这是一个最小的例子 TimeTest.c
CMakeLists.txt
手臂设备上的输出
linker - 如果位置计数器在链接描述文件中初始化为太小或太大,则静态可执行段错误
我正在尝试为该程序生成一个静态可执行文件(使用 musl):
电源:
编译命令:
链接命令(musl libc 放在musl
目录下(1.2.1 版)):
链接描述文件 ( static.ld
):
此配置会生成一个工作可执行文件,但如果我将位置计数器偏移量更改为0x10000
or 0x20000
,则生成的可执行文件在启动期间会因段错误而崩溃。在调试时,我发现 musl 初始化代码试图读取程序头(在 aux 向量中接收到的位置),并且由于某种原因,由 aux 向量给出的程序头的内存地址未映射到我们的地址空间中。
这种行为的原因是什么?链接描述文件中的计数器偏移到底是什么?除了更改加载地址之外,它如何影响链接器输出?
注意:当 musl 初始化代码尝试访问程序头时会发生段错误
c++ - 使用 musl-g++ 从源代码构建时对“__printf_chk”的未定义引用
我正在尝试用 musl 而不是 glibc 编译一个名为 VRPN 的 C++ 库,并遇到链接器错误。
Dockerfile
将以上内容保存到文件并运行docker build .
以获取以下错误(经过大量成功构建):
输出
似乎由于某种原因,musl 的glibc
链接不正确,但我一直无法弄清楚原因。
我读过链接到预编译对象通常是导致此类问题的原因,但在这种情况下,我非常有信心一切都是从源代码构建的。
我对编译器内部没有太多经验,而且我很难找到关于 musl 的阅读材料足够简单以至于我可以理解。任何见解或指示将不胜感激。
谢谢!
rust - 为什么使用 MUSL 交叉编译 AWS Lambda 的 Rust 代码会抱怨“未找到版本 `GLIBC_2.18'”?
我正在使用muslrust Docker 容器为 AWS Lambda 交叉编译 Rust 代码,因为它是我在 Docker Hub 上可以找到的最流行的 MUSL + Rust 包。
要编译,我这样做:
这成功了,但是当我部署到 Lambda 并对其进行测试时,我得到了错误:
我的印象是使用 MUSL 编译会创建一个不需要服务器上的 glibc 的静态库,所以我不确定我在这里做错了什么。
php - alpine:3.7 和 Apple M1 缺少 libc.musl-x86_64.so.1
我尝试在 docker 中安装 php-xdebug,但出现此错误
我用 alpine:3.7 将 Apple M1。我怎么解决这个问题?
Docker 文件的开头:
c++ - x86_64-linux-musl-g++: 致命错误: 无法执行 'cc1plus': execvp: No such file or directory, on alpine container
我在使用 MUSL 工具链 ( http://musl.cc/x86_64-linux-musl-cross.tgz )在 alpine ( 和 ubuntu ) 容器上编译 C/C++ 代码时遇到问题
当容器在 CentOS 工作站(以及 Ubuntu)上运行时会出现该错误
在 Ubuntu 18.04/CentOS 7 VM (Oracle VirtualBox) 上运行时,相同的容器映像能够编译。VM 和工作站上的 docker 版本相同(18.09.5)。
错误:
我还尝试将 cc1plus 的路径添加到 PATH 环境变量。为此,我得到了一个不同的错误:
我以 root 身份运行,'test.cpp' 有 644 个权限。
为该问题找到了一些解决方案。
以“特权”身份运行 Alpine Container 解决了 musl 工具链的问题。之前版本的 musl 工具链(2021 年 1 月发布)也没有给我这个问题。
compilation - 在哪里可以找到用于 armhf 的预编译 musl-libc 库?
我需要重新编译一个大项目,musl-libc
而不是gnu-libc
. 该项目依赖于各种库,如 libopenssl、libasound 等。现在我想知道是否有一个站点可以获取那些已经编译并链接musl-libc
到armhf
架构的库?还是我必须自己重新编译所有这些库(以及它们所依赖的库)?