标签: musl

错误:无法为“ring v0.16.20”运行自定义构建命令

我想在带有 M1 芯片的 macOS Monterey 12.3.1 中使用 musl 构建 rust 1.59 项目,然后运行以下命令:

rustup target add x86_64-unknown-linux-musl
cargo build --release --target=x86_64-unknown-linux-musl
Run Code Online (Sandbox Code Playgroud)

但项目构建输出如下:

error: failed to run custom build command for `ring v0.16.20`

Caused by:
  process didn't exit successfully: `/Users/foo/source/reddwarf/backend/fortune/target/release/build/ring-98ce1debbcda4321/build-script-build` (exit status: 101)
  --- stdout
  OPT_LEVEL = Some("3")
  TARGET = Some("x86_64-unknown-linux-musl")
  HOST = Some("aarch64-apple-darwin")
  CC_x86_64-unknown-linux-musl = None
  CC_x86_64_unknown_linux_musl = None
  TARGET_CC = None
  CC = None
  CROSS_COMPILE = None
  CFLAGS_x86_64-unknown-linux-musl = None
  CFLAGS_x86_64_unknown_linux_musl = None
  TARGET_CFLAGS = None
  CFLAGS = None
  CRATE_CC_NO_DEFAULTS …
Run Code Online (Sandbox Code Playgroud)

rust rust-cargo musl alpine-linux

19
推荐指数
1
解决办法
1万
查看次数

强制64位长双打?

我正在musl-libcaarch64(ARM 64位)平台上的项目静态构建.我想避免使用任何软浮点库,例如GCC的软浮点库例程.但是,即使我使用它们,它们仍然出现在库档案中-mfloat-abi=hard.我可以说,这是因为ARM 64位平台将a定义long double为128位.

有没有办法改变这种行为?例如,我可以强制long double定义为与double?相同的大小吗?我知道这是C标准所允许的,但我不确定是否有任何方法可以强制Clang(我特意使用Clang)来编译这样的定义.

c floating-point clang arm64 musl

16
推荐指数
1
解决办法
782
查看次数

可以在OS X上构建musl libc吗?

我正在尝试在运行OS X 10.11.5的机器上构建musl-libc.不幸的是,我在运行时遇到以下错误make:

clang: warning: optimization flag '-fexcess-precision=standard' is not supported
clang: warning: optimization flag '-frounding-math' is not supported
<inline asm>:6:1: error: unknown directive
.weak _DYNAMIC 
^
<inline asm>:7:1: error: unknown directive
.hidden _DYNAMIC 
^
2 errors generated.
make: *** [obj/crt/Scrt1.o] Error 1
Run Code Online (Sandbox Code Playgroud)

我正在使用Clang 7.3.0(703-0-31),而我正在使用来自musl repo的源码git://git.musl-libc.org/musl.

macos building musl

9
推荐指数
1
解决办法
1325
查看次数

qemu-x86_64:无法打开“/lib/ld-musl-x86_64.so.1”:没有这样的文件或目录

有没有人在尝试执行命令时遇到此错误docker-compose up

我试图通过查看其他涉及类似内容的文章来解决这个问题,但没有成功。

我正在尝试使用 docker-compose 文件运行我的 spring boot 应用程序,但不断收到此错误:

qemu-x86_64: Could not open '/lib/ld-musl-x86_64.so.1': No such file or directory
Run Code Online (Sandbox Code Playgroud)

我试图按照我在网上阅读的建议来修复它,但没有任何效果。

我努力了:

阅读这篇文章后: https: //github.com/nodejs/help/issues/3239 添加以下内容

platform: linux/amd64
Run Code Online (Sandbox Code Playgroud)

到我的 docker-compose 文件,但没有什么区别

FROM --platform=linux/amd64在我的 Dockerfile 前面尝试过

当我读到这篇文章时,我也尝试安装musl但无法执行make命令

curl https://musl.libc.org/releases/musl-1.2.2.tar.gz -o musl-1.2.2.tar.gz
tar -xvf musl-1.2.2.tar.gz
cd musl-1.2.2
./configure
make 
make install
Run Code Online (Sandbox Code Playgroud)

我的 Docker 文件如下所示

FROM azul/zulu-openjdk-alpine:11 as packager

RUN { \
        java --version ; \
        echo "jlink version:" && \
        jlink --version ; \
    } …
Run Code Online (Sandbox Code Playgroud)

java musl dockerfile docker-compose

9
推荐指数
1
解决办法
1万
查看次数

在 musl 1.2.0 上交叉编译 rust 项目时“未定义对`__stat_time64'的引用”

我正在尝试交叉编译一个 Rust 项目,arm-linux-musleabihf并且在使用musl-cross-make. rust 项目依赖于libgit2,这似乎是导致问题的依赖。

使用:

  • 最新的锈(1.43.1 通过rustup
  • arm-unknown-linux-musleabihf目标
  • 最新musl-cross-makeTARGET=arm-linux-musleabihf
  • 指向TARGET_CC_linux_arm-unknown-linux-musleabihfCARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABIHF_LINKER/opt/musl-cross-make/output/bin/arm-linux-musleabihf-gcc

构建时出现错误:

error: linking with `/opt/musl-cross-make/output/bin/arm-linux-musleabihf-gcc` failed: exit code: 1
...
  = note: /opt/musl-cross-make/output/bin/../lib/gcc/arm-linux-musleabihf/9.2.0/../../../../arm-linux-musleabihf/bin/ld: /tmp/rustcvSvGAJ/liblibgit2_sys-e56c2f9bd024a0a9.rlib(odb.o): in function `git_odb__add_default_backends':
          odb.c:(.text.git_odb__add_default_backends+0x24): undefined reference to `__stat_time64'
          /opt/musl-cross-make/output/bin/../lib/gcc/arm-linux-musleabihf/9.2.0/../../../../arm-linux-musleabihf/bin/ld: /tmp/rustcvSvGAJ/liblibgit2_sys-e56c2f9bd024a0a9.rlib(config.o): in function `git_config_add_file_ondisk':
          config.c:(.text.git_config_add_file_ondisk+0x34): undefined reference to `__stat_time64'
          /opt/musl-cross-make/output/bin/../lib/gcc/arm-linux-musleabihf/9.2.0/../../../../arm-linux-musleabihf/bin/ld: /tmp/rustcvSvGAJ/liblibgit2_sys-e56c2f9bd024a0a9.rlib(config_file.o): in function `config_file_read':
          config_file.c:(.text.config_file_read+0x48): undefined reference to `__stat_time64'
...etc...
Run Code Online (Sandbox Code Playgroud)

看起来链接器在解析特定于 musl 的time64符号时遇到了困难,目前尚不清楚原因。

这在以下情况下工作正常:

  • x86_64-linux-musl …

arm cross-compiling rust musl

8
推荐指数
1
解决办法
635
查看次数

使用 /usr/include 中的其他标头链接到 musl

我正在尝试使用 x11 编译程序并使用 musl 作为 c 库。我的系统上仍然有 glibc。Musl 位于/usr/local/musl/includeThe glib headers are still in/usr/include

当我与

musl-gcc test.c
Run Code Online (Sandbox Code Playgroud)

我明白了fatal error: X11/Xlib.h: no such file or directory

如果我尝试

musl-gcc test.c -I/usr/include
Run Code Online (Sandbox Code Playgroud)

它包含 glib 标头而不是 musl 标头,并引发一堆错误。

如果我尝试

musl-gcc test.c -I/usr/local/musl/include -I/usr/include
Run Code Online (Sandbox Code Playgroud)

它仍然包含 /usr/include 中 glib 的标头

如何使 musl-gcc 使用 musl 标头,但仍包含 /usr/include 中的其他文件?

c standard-library include-path musl

7
推荐指数
1
解决办法
2594
查看次数

完整和隔离的LLVM/musl工具链

我想要实现的是使用musl as 编译一个GNU独立且隔离的 LLVM工具链.clib

最近LLVM 4.0已经发布了许多新的酷功能,包括生产就绪的LLD,因此链接步骤也可以由LLVM处理.

堆栈或多或少是:

  • LLVM
  • LLD
  • 编译器RT
  • libcxx
  • libcxxabi
  • MUSL

之后,实际上可以在没有太多补丁的情况下这样做(除了编译之外musl),但遗憾的是,没有关于此的良好文档.

有什么建议?

llvm clang toolchain musl lld

7
推荐指数
2
解决办法
1583
查看次数

standard_init_linux.go:219: exec 用户进程导致:没有这样的文件或目录

我正在尝试将 Rust 服务器从 Heroku 移动到 Google Cloud 或 AWS。尽管我喜欢git push使用指定的 buildpack进行构建和部署到 Heroku的简单性,但该服务对我来说并不划算。

我将 Google Cloud Run 和 AWS Elastic Beanstalk 确定为潜在的替代方案。

首先,我需要使用静态二进制文件构建一个 docker 镜像。

因此,我添加了这个 Dockerfile:

FROM rust AS build
WORKDIR /usr/src
RUN rustup target add x86_64-unknown-linux-musl
RUN apt-get update && apt-get upgrade -y && apt-get install -y build-essential git clang llvm-dev libclang-dev libssl-dev pkg-config libpq-dev musl-tools brotli
RUN USER=root cargo new loxe-api
WORKDIR /usr/src/loxe-api
COPY Cargo.toml Cargo.lock ./
COPY data ./data
COPY migrations ./migrations
ENV RUSTFLAGS="-C target-feature=+crt-static" …
Run Code Online (Sandbox Code Playgroud)

static-libraries static-linking rust docker musl

7
推荐指数
1
解决办法
2万
查看次数

Alpine Linux 上的符号版本控制

musl C 库只有符号版本控制的近似实现。这可能导致具有不同符号版本的符号绑定在一起,这在完整实现中不会发生。因此,希望使用 musl 构建的项目最好完全避免符号版本控制。(不支持符号版本控制本身对于工具链来说不一定是一个糟糕的选择;这完全取决于目标受众。)

但是,Alpine Linux 工具链编译 binutils 时具有完整的符号版本支持:GAS 支持该.symver指令,链接编辑器处理版本脚本并分配符号版本(就像在 GNU/Linux 上一样)。一个简单的编译器/汇编器或链接检查显示符号版本支持。因此,Alpine Linux 在发行版中包含的一些共享对象实际上使用了符号版本控制,尽管 musl 动态加载器会忽略这些数据。(数据只会使二进制文件膨胀。)

在某些情况下,软件无法运行(在构建正常之后),因为它以 musl 动态链接器不支持的方式使用兼容性符号(没有默认版本的符号)。这是一个不起作用的小例子:

cat > symver.c <<EOF
void
compat_function (void)
{
}
__asm__ (".symver compat_function,compat_function@SYMVER");

void
call_compat_function (void)
{
  return compat_function ();
}
EOF

echo "SYMVER { };" > symver.map

cat > main.c <<EOF
extern void call_compat_function (void);

int
main (void)
{
  call_compat_function ();
}
EOF

gcc -fpic -shared -o symver.so -Wl,--version-script=symver.map symver.c
gcc -Wl,--rpath=. -o main …
Run Code Online (Sandbox Code Playgroud)

binutils musl alpine-linux

6
推荐指数
0
解决办法
211
查看次数

如何在GCC中规避“尝试使用中毒的malloc / calloc”错误?

我正在使用跨Musl编译器(相同版本)构建本机musl编译器(GCC 8.3.0),但出现此错误:

In file included from /usr/local/x86_64-cros-linux-musl/include/pthread.h:30,
                 from /usr/local/x86_64-cros-linux-musl/lib/gcc/x86_64-cros-linux-musl/8.3.0/include/c++/x86_64-cros-linux-musl/bits/gthr-default.h:35,
                 from /usr/local/x86_64-cros-linux-musl/lib/gcc/x86_64-cros-linux-musl/8.3.0/include/c++/x86_64-cros-linux-musl/bits/gthr.h:148,
                 from /usr/local/x86_64-cros-linux-musl/lib/gcc/x86_64-cros-linux-musl/8.3.0/include/c++/ext/atomicity.h:35,
                 from /usr/local/x86_64-cros-linux-musl/lib/gcc/x86_64-cros-linux-musl/8.3.0/include/c++/bits/basic_string.h:39,
                 from /usr/local/x86_64-cros-linux-musl/lib/gcc/x86_64-cros-linux-musl/8.3.0/include/c++/string:52,
                 from ../../gcc-8.3.0/gcc/brig/brigfrontend/brig-to-generic.h:25,
                 from ../../gcc-8.3.0/gcc/brig/brig-lang.c:46:
/usr/local/x86_64-cros-linux-musl/include/sched.h:76:7: error: attempt to use poisoned "calloc"
 void *calloc(size_t, size_t);
       ^
/usr/local/x86_64-cros-linux-musl/include/sched.h:116:36: error: attempt to use poisoned "calloc"
 #define CPU_ALLOC(n) ((cpu_set_t *)calloc(1,CPU_ALLOC_SIZE(n)))
                                    ^
Run Code Online (Sandbox Code Playgroud)

关于如何规避这一点的任何想法?

细节:

目标/主机三重: x86_64-linux-musl

音乐版本: 1.1.21

我在这里应用了musl补丁:http ://port70.net/~nsz/musl/gcc-8.2.0/

我已经在源目录中运行了此命令:

sed -e '/m64=/s/lib64/lib/' -i gcc/config/i386/t-linux64
Run Code Online (Sandbox Code Playgroud)

c gcc musl

6
推荐指数
1
解决办法
220
查看次数