我正在尝试使用以下代码在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
谁能帮我弄清楚这里出了什么问题? 您缺少(至少)一个静态版本的glibc
。如果你真的想静态链接(我假设动态链接,没有-static
标志,会工作吗?为什么要在这里静态地链接 ?)——你必须找出在你的发行版中哪个包包含libc.a
文件。
另一方面,如果编译从来没有工作,不管-static
与否,你错过了开发包,通常称为libc-dev
, libc-devel
, glibc-dev
, glibc-devel
或类似的东西,这真的取决于你的发行版。
如果你想使用-static,你需要安装glibc-static-devel.