0

次のコードを使用して、C でシェルを実行しようとしています。

#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-develglibc-devglibc-develまたは同様のものと呼ばれるものであり、実際にはディストリビューションに依存します。

于 2015-10-04T19:25:06.577 に答える
0

-static を使用する場合は、glibc-static-devel をインストールする必要があります。

于 2016-02-25T22:00:47.317 に答える