问题标签 [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.
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
是添加了pthread
and gomp
。
这是来自的输出musl-gcc -fopenmpomp.c -Wl,--trace
linux - musl libc:linux头文件的路径
我正在尝试构建 lfs 并使用 musl libc 实现而不是 glibc。Glibc 实际上允许设置 linux 内核头文件的路径(--with-headers,就像那样),但 musl 不允许。
此外 musl 自述文件说如下
用于构建 musl 的系统不需要是基于 Linux 的,Linux 内核头文件也不需要可用。
这怎么可能?libc 应该知道内核中存在哪些功能,并且这些信息通常由标头提供。有什么建议么?
ps:我正在运行fedora 21
clang - 如何在 gentoo(glibc 配置文件)和 clang 上针对 musl-libc 静态构建?
我不确定这是否属于超级用户而不是stackoverflow,至少对于第一部分来说,但对于初学者来说,我如何在不替换glibc或切换到musl配置文件的情况下安装sys-libs/musl
(或任何其他替代品);libc
其次,我如何告诉clang
静态链接到这个库(或者,再次,任何其他 alt libc
)而不是系统libc
(sys-libs/glibc
)?
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.so
为musl-libc.so
?
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 和我想是免费的)。所以这真的很令人费解。
rust - 当 rustc 启用 musl 时,无法使用 cargo 构建 rust-libc
我通过以下链接成功创建了一个musl
配置rustc
当我使用时,我尝试构建一个项目(使用非 musl 配置的 rust 构建良好)失败了cargo rustc -- --target=x86_64-unknown-linux-musl
然后,我尝试rust-libc
使用 crate 中的代码创建库。更准确地说,我使用了cargo
to build提供的命令rust-libc
,我只添加--target=x86_64-unknown-linux-musl
了命令。这次它报告失败了:
我有两个问题:
是否必须构建
musl
配置cargo
才能使用cargo build --target=x86_64-unknown-linux-musl
?我该如何解决这个问题:
/li>
c - 使用 GCC 驱动程序时,是什么使静态库“不兼容”?
所以我想做的是在 Ubuntu 14.04 (x86_64) 上musl-libc
基于目前可用的最新发布的 1.1.11 版本进行设置。
我所做的是:
- 为 GCC 安装 multilib 支持:
sudo apt-get --no-install-recommends install gcc-multilib
- 分别为 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 像这样:Makefile
premake4
这似乎适用于链接步骤,该步骤使用以下内容进行轰炸:
相关线路是:
现在我对此不了解的部分是,当我ar x
在(见上文)的构建步骤中生成libc.a
(进入文件夹)时,它证明包含的所有对象似乎都是正确的目标架构(所有show ),我可以证明在发出以下命令时出现空:$HOME/bin/musl-32-bit/lib/libc
musl-libc
ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
事实上,这没有输出。同样,当使用相同的方法查看构建目录时,我找不到任何不符合我期望的目标文件。
为了更好地衡量,我决定还任务objdump
告诉我更多有关libc.a
问题的信息并得出相同的结果:
所以我的问题是双重的:
- 当要求 GCC 链接静态库时,什么会使静态库失去“不兼容”的资格?
- 我看到的具体问题是什么?
第一个是我真正感兴趣的,但第二个是我要求分享您解决此类故障的经验。例如,我错过了哪些验证步骤?
请注意,“本机”premake4
构建得很好:
从添加-v
标志时的输出LDFLAGS
来看,好像目标始终停留在x86_64-linux-gnu
. 不过,我还没有想出解决这个问题的方法。
glibc - Alpine musl vs glibc - 他们应该兼容吗?
所以我在玩Alpine Linux,它使用musl vs glibc。
我发现由于这个选择,我无法运行 Oracle Java,或者在 glibc 下构建的静态 go 二进制文件。
musl 应该与更广泛使用的 glibc 兼容,还是需要针对它重新编译?(我真的不希望像甲骨文这样的大公司这样做!)
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 构建的程序)
c++ - 针对 musl 编译 libstdc++
我必须用 musl-gcc 包装器编译一些 c++ 程序,所以我需要 c++ 头文件和库。在我可以使用它们之前,我想我必须使用 musl-gcc 本身针对 musl 编译 libstdc++ 源代码。
我从最新版本的 gcc 源中获得了 libstdc++ 源,根据本指南,我所要做的就是运行 configure 指定编译器路径(即 /usr/local/musl/bin/musl-gcc)作为 - -host 选项参数
但是,配置失败,我收到错误
我错过了一些步骤吗?