3

我按照这个“教程”创建了一个针对 MUSL 构建的静态 GCC、libc 和 libstdc++。

构建目录:/home/user/musl_gcc/

当我尝试创建一个简单的测试 C 程序并在不带参数的情况下对其进行编译时,我收到以下错误:

[user@Arch]: ~/musl_gcc/amd64-linux-musl/bin>$ cat test.c
#include <stdio.h>
#include <unistd.h>

int main()
{
    puts("Test");
    _exit(0); // return 0 leads to a segfault (unsure why)
}

[user@Arch]: ~/musl_gcc/amd64-linux-musl/bin>$ ./amd64-linux-musl-gcc test.c
collect2: fatal error: cannot find 'ld'
compilation terminated.
[user@Arch]: ~/musl_gcc/amd64-linux-musl/bin>$ which ld
/usr/bin/ld
[user@Arch]: ~/musl_gcc/amd64-linux-musl/bin>$ `!!` -v
`which ld` -v
GNU ld (GNU Binutils) 2.29.1

链接器不指向自定义构建的链接器,我也不希望它指向。

通过在单独的步骤中编译和链接可以很容易地避免这种情况:

[user@Arch]: ~/musl_gcc/amd64-linux-musl/bin>$ ./amd64-linux-musl-gcc test.c -c
[user@Arch]: ~/musl_gcc/amd64-linux-musl/bin>$ ./amd64-linux-musl-ld test.o -L../lib/ -lc -o test
./amd64-linux-musl-ld: warning: cannot find entry symbol _start; defaulting to 00000000004000e8
[user@Arch]: ~/musl_gcc/amd64-linux-musl/bin>$ ./test
Test
[user@Arch]: ~/musl_gcc/amd64-linux-musl/bin>$

然而。这对我没什么用。我最终想让它与使用 CMake 作为构建环境的 C++ 应用程序一起工作,但这是一个乏味的“查找库”的猫捉老鼠游戏。如何指定要使用的链接器?我以为是LD环境变量,但事实证明这是徒劳的。

4

0 回答 0