GCC -std=gnu99 エラー

GCC -std=gnu99 エラー

このコマンドでCコードをコンパイルしようとしていますgcc -Wall -m32 -std=gnu99 -o <filename> <filename>

出力ファイルを取得する代わりに、これを取得します。

/usr/bin/ld: cannot find Scrt1.o: No such file or directory
/usr/bin/ld: cannot find crti.o: No such file or directory
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/7/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/7/libgcc_s.so.1 when searching for libgcc_s.so.1
/usr/bin/ld: cannot find libgcc_s.so.1
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/7/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
collect2: error: ld returned 1 exit status

でコンパイルすると-std=c11完全に正常に動作しますが、 - では動作しませんstd=gnu99

答え1

基本的にこれは、システムで 32 ビットがサポートされておらず、64 ビットのみがサポートされていることを意味します。

main.c の場合

/*  extern void start();                                                     */

int main()
{
/*  start();                                                                 */
}

そして

gcc -m32 main.c -o main

私は gcc だけをインストールした Ubuntu 18.04 を使用しました:

> ~/PROJECT2/ciforthcvs$ gcc -m32 main.c -o main /usr/bin/ld: cannot
> find Scrt1.o: No such file or directory /usr/bin/ld: cannot find
> crti.o: No such file or directory /usr/bin/ld: skipping incompatible
> /usr/lib/gcc/x86_64-linux-gnu/7/libgcc.a when searching for -lgcc
> /usr/bin/ld: cannot find -lgcc /usr/bin/ld: skipping incompatible
> /usr/lib/gcc/x86_64-linux-gnu/7/libgcc.a when searching for -lgcc
> /usr/bin/ld: cannot find -lgcc collect2: error: ld returned 1 exit
> status

su
# apt install multi-lib

すべてがうまくいき、何もしないプログラムを実行することができました。

答え2

試す:

find / -iname='*Scrit1.o*' 2>/dev/null
find / -iname='*criti.o*' 2>/dev/null

gccコマンドを修正して

gcc -Wall -m32 -std=gnu99 -o <filename> <filename> /some-path/Scrit1.o /some-other-path/criti.o

関連情報