问题标签 [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.

0 投票
1 回答
514 浏览

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++. 这似乎很奇怪。

我误解了错误吗?我对如何推进这件事有点迷茫。

这是整个消息:

0 投票
1 回答
117 浏览

c - 在特定的内存部分中包含标准库函数

在 C 语言中,我们可以强制链接器将特定函数放在源代码的特定部分中,使用类似于以下示例的内容。

在这里,该函数my_function用预处理器宏标记,PUT_IN_USER_SECTION以便告诉链接器将其放入 section 中.user_section

现在,我想知道的是,当我们使用math.hGLIBC、MUSL 中的标准函数(例如库中的日志函数)时,我们执行静态链接:是否可以将这些函数放在特定部分? 怎么做?

0 投票
2 回答
303 浏览

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

手臂设备上的输出

0 投票
1 回答
81 浏览

linker - 如果位置计数器在链接描述文件中初始化为太小或太大,则静态可执行段错误

我正在尝试为该程序生成一个静态可执行文件(使用 musl):

电源:

编译命令:

链接命令(musl libc 放在musl目录下(1.2.1 版)):

链接描述文件 ( static.ld):

此配置会生成一个工作可执行文件,但如果我将位置计数器偏移量更改为0x10000or 0x20000,则生成的可执行文件在启动期间会因段错误而崩溃。在调试时,我发现 musl 初始化代码试图读取程序头(在 aux 向量中接收到的位置),并且由于某种原因,由 aux 向量给出的程序头的内存地址未映射到我们的地址空间中。

这种行为的原因是什么?链接描述文件中的计数器偏移到底是什么?除了更改加载地址之外,它如何影响链接器输出?

注意:当 musl 初始化代码尝试访问程序头时会发生段错误

0 投票
1 回答
748 浏览

c++ - 使用 musl-g++ 从源代码构建时对“__printf_chk”的未定义引用

我正在尝试用 musl 而不是 glibc 编译一个名为 VRPN 的 C++ 库,并遇到链接器错误。

Dockerfile

将以上内容保存到文件并运行docker build .以获取以下错误(经过大量成功构建):

输出

似乎由于某种原因,musl 的glibc链接不正确,但我一直无法弄清楚原因。

我读过链接到预编译对象通常是导致此类问题的原因,但在这种情况下,我非常有信心一切都是从源代码构建的。

我对编译器内部没有太多经验,而且我很难找到关于 musl 的阅读材料足够简单以至于我可以理解。任何见解或指示将不胜感激。

谢谢!

0 投票
0 回答
291 浏览

rust - 为什么使用 MUSL 交叉编译 AWS Lambda 的 Rust 代码会抱怨“未找到版本 `GLIBC_2.18'”?

我正在使用muslrust Docker 容器为 AWS Lambda 交叉编译 Rust 代码,因为它是我在 Docker Hub 上可以找到的最流行的 MUSL + Rust 包。

要编译,我这样做:

这成功了,但是当我部署到 Lambda 并对其进行测试时,我得到了错误:

我的印象是使用 MUSL 编译会创建一个不需要服务器上的 glibc 的静态库,所以我不确定我在这里做错了什么。

0 投票
1 回答
1483 浏览

php - alpine:3.7 和 Apple M1 缺少 libc.musl-x86_64.so.1

我尝试在 docker 中安装 php-xdebug,但出现此错误

我用 alpine:3.7 将 Apple M1。我怎么解决这个问题?

Docker 文件的开头:

0 投票
0 回答
666 浏览

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 月发布)也没有给我这个问题。

0 投票
0 回答
33 浏览

compilation - 在哪里可以找到用于 armhf 的预编译 musl-libc 库?

我需要重新编译一个大项目,musl-libc而不是gnu-libc. 该项目依赖于各种库,如 libopenssl、libasound 等。现在我想知道是否有一个站点可以获取那些已经编译并链接musl-libcarmhf架构的库?还是我必须自己重新编译所有这些库(以及它们所依赖的库)?

0 投票
0 回答
68 浏览

c - 没有线程本地存储的 errno

我想用tcc静态编译一个程序。tcc 抱怨error: Unknown relocation type: 23. 这显然是由于我的 libc 实现(glibc 2.28-10)使用线程本地存储来实现errno,tcc 不支持。我要编译的程序不使用线程,因此如果errno作为全局实现不会有问题,这将为 tcc 修复它。有谁知道是否有可以配置为执行此操作的 libc 实现?