私はコンパイルの問題を抱えていましたが、これらのコードは同じ教授のものですが、私のクラスメートがそれをコンパイルできるのは、私が見つけようとしているものです。Linuxオペレーティングシステムで-m32オプションが動作しないのはなぜですか?
LinuxMint 18.2 64bit OS(gccバージョン5.4.0)でSurface Pro1(Intel i5 4G Ram)を使用しましたが、コマンドgcc -m32 ./ch2ex3.c
でコードをコンパイルできない場合があります。
fatal error: sys/cdefs.h: No such file or directory, compilation terminated.
が、オプション-m32
せずに使用するのと同じコマンドが正常に動作している場合、それは代わりに「NULL」を印刷する必要があるときには、私のプログラムの最後で「セグメンテーションフォールト」を与える:ここにエラーがあります。
質問なぜこのオプション-m32
はコンピュータで動作しないのですか?
この私が使用したコードされています
#include <stdio.h>
int *FP; // a global pointer
main(int argc, char *argv[], char *env[])
{
int a,b,c;
printf("enter main: &argc=%x &argv=%x\n", &argc, &argv);
printf("&a=%x &b=%x &c=%x\n", &a, &b, &c);
a=1; b=2; c=3;
A(a,b);
printf("exit main\n");
}
int A(int x, int y)
{
int d,e,f;
printf("enter A\n");
d=4; e=5; f=6;
B(d,e);
printf("exit A\n");
}
int B(int x, int y)
{
int u,v,w;
/////////////////////////////////////////////////////
int *p;
/////////////////////////////////////////////////////
printf("enter B\n");
u=7; v=8; w=9;
/////////////////////////////////////////////////////
p = (int *)&p;
/////////////////////////////////////////////////////
asm("movl %ebp, FP"); // set FP=CPU's %ebp register
/////////////////////////////////////////////////////
printf("FP=%8x p=%8x\n", FP, p);
while(FP)
{
printf("%8x->", FP);
FP = (int *)*FP;
}
printf("NULL\n");
getchar();
/////////////////////////////////////////////////////
printf("exit B\n");
}
すべてのライブラリをプルするには、 'gcc'だけでなく' gcc-multiarch'パッケージが必要です。パッケージ名はディストリビューションによって異なるかもしれませんが、この具体的な答えはDebian/Ubuntu(Mintを含む)のものです。 – o11c
同じ質問で複数の質問をしないでください。彼らに別の質問をさせる。 – o11c
Raspの「期待文字列リテラル」エラーは、そこに一重引用符を使用しているためです(つまり、表示するコードはコンパイルしようとしたコードではありません)。 – DevSolar