问题标签 [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 回答
1116 浏览

gcc - 没有 GLIBC 的 GOMP

我想将musl与 OpenMP 一起使用。但是,当我编译一个简单的 OpenMP 程序时,例如

我得到错误

显然存在与线程本地存储(TLS)相关的问题。如何让musl与 OpenMP 一起工作?

我目前在 Intel(R) Xeon(R) CPU E5-1620 上使用 Ubuntu 14.04、GCC 4.9.1、EGLIBC 2.19。

这是我从 collect2 标记中找到的发送到链接器的内容musl-gcc -v -fopenmp omp.o。我将大部分空格转换为换行符。这样做与没有选项的唯一区别-fopenmp是添加了pthreadand gomp

这是来自的输出musl-gcc -fopenmpomp.c -Wl,--trace

0 投票
0 回答
891 浏览

linux - musl libc:linux头文件的路径

我正在尝试构建 lfs 并使用 musl libc 实现而不是 glibc。Glibc 实际上允许设置 linux 内核头文件的路径(--with-headers,就像那样),但 musl 不允许。

此外 musl 自述文件说如下

用于构建 musl 的系统不需要是基于 Linux 的,Linux 内核头文件也不需要可用。

这怎么可能?libc 应该知道内核中存在哪些功能,并且这些信息通常由标头提供。有什么建议么?

ps:我正在运行fedora 21

0 投票
1 回答
2024 浏览

clang - 如何在 gentoo(glibc 配置文件)和 clang 上针对 musl-libc 静态构建?

我不确定这是否属于超级用户而不是stackoverflow,至少对于第一部分来说,但对于初学者来说,我如何在不替换glibc或切换到musl配置文件的情况下安装sys-libs/musl(或任何其他替代品);libc其次,我如何告诉clang静态链接到这个库(或者,再次,任何其他 alt libc)而不是系统libcsys-libs/glibc)?

0 投票
2 回答
1301 浏览

glibc - 在同一进程中同时加载 musl libc.so 和 gcc libc.so?

我有一个用 musl libc 编译的共享库

它链接到 musl 的 libc.so

现在我有问题将此共享对象加载到 java 应用程序中。但是,如果我恢复到 GNU 的链接libc.so,它就可以工作。

是否可以在同一个进程中同时拥有 GNU 和 musl libc.so?java 应用程序依赖于 GNU 的libc.so,但我希望我的共享对象使用 musl 的libc.so

也许有一种方法可以将 musl 重命名libc.somusl-libc.so

0 投票
2 回答
401 浏览

mips - MIPS上的ELF加载,malloc问题

我正在 MIPS(32 位)中加载一个普通的静态链接 ELF 二进制文件。在映射可加载段之后,这是我在跳转到目标 ELF 的 CRT_start函数之前设置堆栈的方式:

所以我将环境变量、命令行参数推argc送到堆栈上,最后跳到目标 ELF 的入口点。这工作正常,我最终在加载程序的主函数中使用正确的命令行参数和所有内容,除了一件事:malloc不起作用!对它的任何调用都返回 null 并将 errno 设置为ENOMEM

我正在使用的 MIPS 模拟器(qemu-system-mips)有足够的可用内存,如果我只是启动程序而不使用我的加载器,它工作正常,所以它必须来自加载器。但我不知道为什么;我对 x86、x86_64 和 arm 使用了相同的加载技术,它们都工作得很好,但是由于某种原因 malloc 在加载器的 MIPS 版本中出现故障。

我在这里错过了什么吗?在跳转到加载的可执行文件之前实际上需要完成的事情,这可能对 MIPS 很重要,但对我成功尝试过的其他架构不重要?我想我会在这里问是否有人遇到过这个问题,因为我真的无法想象这里出了什么问题。

我在 Linux 下运行它并使用 musl 作为 libc。经过一些调试后,我发现 musl 的expand_heap函数存在差异,但我还没有汇编信息的来源,所以不清楚错误是什么(musl 对其他架构使用相同的 malloc 代码,它们工作得很好) .

二进制文件是静态链接的(包括 libc;它没有动态依赖项),其他所有内容(printf、fopen 等)在加载的二进制文件中都可以正常工作,但 malloc 显然是唯一的例外(当然还有 realloc/calloc 和我想是免费的)。所以这真的很令人费解。

0 投票
1 回答
1138 浏览

rust - 当 rustc 启用 musl 时,无法使用 cargo 构建 rust-libc

我通过以下链接成功创建了一个musl配置rustc

当我使用时,我尝试构建一个项目(使用非 musl 配置的 rust 构建良好)失败了cargo rustc -- --target=x86_64-unknown-linux-musl

然后,我尝试rust-libc使用 crate 中的代码创建库。更准确地说,我使用了cargoto build提供的命令rust-libc,我只添加--target=x86_64-unknown-linux-musl了命令。这次它报告失败了:

我有两个问题:

  • 是否必须构建musl配置cargo才能使用cargo build --target=x86_64-unknown-linux-musl

  • 我该如何解决这个问题:

    /li>
0 投票
2 回答
1671 浏览

c - 使用 GCC 驱动程序时,是什么使静态库“不兼容”?

所以我想做的是在 Ubuntu 14.04 (x86_64) 上musl-libc基于目前可用的最新发布的 1.1.11 版本进行设置。

我所做的是:

  1. 为 GCC 安装 multilib 支持:sudo apt-get --no-install-recommends install gcc-multilib
  2. 分别为 32 位和 64 位配置库并将它们安装到单独的文件夹中:
    • CFLAGS=-m32 ./configure --prefix=$HOME/bin/musl-32-bit --disable-shared --target=i386-linux-gnu && make && make install
    • CFLAGS=-m64 ./configure --prefix=$HOME/bin/musl-64-bit --disable-shared --target=x86_64-linux-gnu

然后为了构建一个静态链接,我在生成的premake4对象上调用 GNU make 像这样:Makefilepremake4

这似乎适用于链接步骤,该步骤使用以下内容进行轰炸:

相关线路是:

现在我对此不了解的部分是,当我ar x在(见上文)的构建步骤中生成libc.a(进入文件夹)时,它证明包含的所有对象似乎都是正确的目标架构(所有show ),我可以证明在发出以下命令时出现空:$HOME/bin/musl-32-bit/lib/libcmusl-libcELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped

事实上,这没有输出。同样,当使用相同的方法查看构建目录时,我找不到任何不符合我期望的目标文件。

为了更好地衡量,我决定还任务objdump告诉我更多有关libc.a问题的信息并得出相同的结果:

所以我的问题是双重的:

  1. 当要求 GCC 链接静态库时,什么会使静态库失去“不兼容”的资格?
  2. 我看到的具体问题是什么?

第一个是我真正感兴趣的,但第二个是我要求分享您解决此类故障的经验。例如,我错过了哪些验证步骤?


请注意,“本机”premake4构建得很好:

从添加-v标志时的输出LDFLAGS来看,好像目标始终停留在x86_64-linux-gnu. 不过,我还没有想出解决这个问题的方法。

0 投票
1 回答
4822 浏览

glibc - Alpine musl vs glibc - 他们应该兼容吗?

所以我在玩Alpine Linux,它使用musl vs glibc。

我发现由于这个选择,我无法运行 Oracle Java,或者在 glibc 下构建的静态 go 二进制文件。

musl 应该与更广泛使用的 glibc 兼容,还是需要针对它重新编译?(我真的不希望像甲骨文这样的大公司这样做!)

0 投票
0 回答
602 浏览

musl - 在 glibc 系统上运行 musl 应用程序(使用 libc.so 共享库)

如何musl-gcc在基于 glibc 的系统上构建和运行使用(无静态链接)编译的程序?

如果我构建一个简单的 hello world c 程序,objdump -p只显示 libc.so 为 NEEDED

但是,如果我将包含 musl 的 libc 的目录添加到我的 LD_LIBRARY_PATH 中,程序仍然无法运行。是否可以在基于 glibc 的系统上运行依赖于 musl 的 libc 的程序?

(我目前可以运行带有静态链接的 musl 构建的程序)

0 投票
1 回答
2261 浏览

c++ - 针对 musl 编译 libstdc++

我必须用 musl-gcc 包装器编译一些 c++ 程序,所以我需要 c++ 头文件和库。在我可以使用它们之前,我想我必须使用 musl-gcc 本身针对 musl 编译 libstdc++ 源代码。

我从最新版本的 gcc 源中获得了 libstdc++ 源,根据本指南,我所要做的就是运行 configure 指定编译器路径(即 /usr/local/musl/bin/musl-gcc)作为 - -host 选项参数

但是,配置失败,我收到错误

我错过了一些步骤吗?