0

我正在尝试使用以下代码在 C 中执行 shell:

#include <unistd.h>
int main(){
    char *name[2];
    name[0] = "/bin/sh";
    name[1] = NULL;
    execve(name[0],name,NULL);
    return(0);
}

为了编译它,我使用了 gcc -static 标志:

gcc -static -o shell shell.c

但是,我收到以下错误:

/bin/ld: cannot find -lc

到目前为止,我已经尝试运行:ld -lc --verbose这就是我发现的:

attempt to open /usr/x86_64-mageia-linux-gnu/lib64/libc.so failed
attempt to open /usr/x86_64-mageia-linux-gnu/lib64/libc.a failed
attempt to open /usr/local/lib64/libc.so failed
attempt to open /usr/local/lib64/libc.a failed

谁能帮我弄清楚这里出了什么问题?

4

2 回答 2

0

您缺少(至少)静态版本的glibc. 如果您真的想静态链接(我假设没有-static标志的动态链接会起作用?为什么在这里静态链接?) - 您将必须找出哪个包包含libc.a您的发行版所需的文件。

另一方面,如果编译永远无法工作,无论是否-static,您都缺少开发包,通常称为, ,libc-devlibc-devel类似的东西,这实际上取决于您的发行版。glibc-devglibc-devel

于 2015-10-04T19:25:06.577 回答
0

如果要使用-static,则需要安装glibc-static-devel。

于 2016-02-25T22:00:47.317 回答