2017-08-28 12 views
-2

私はコンパイルの問題を抱えていましたが、これらのコードは同じ教授のものですが、私のクラスメートがそれをコンパイルできるのは、私が見つけようとしているものです。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"); 
} 
+0

すべてのライブラリをプルするには、 'gcc'だけでなく' gcc-multiarch'パッケージが必要です。パッケージ名はディストリビューションによって異なるかもしれませんが、この具体的な答えはDebian/Ubuntu(Mintを含む)のものです。 – o11c

+1

同じ質問で複数の質問をしないでください。彼らに別の質問をさせる。 – o11c

+0

Raspの「期待文字列リテラル」エラーは、そこに一重引用符を使用しているためです(つまり、表示するコードはコンパイルしようとしたコードではありません)。 – DevSolar

答えて

0

私のソリューションは、上記のコマンドあなたのLinuxMint18.2に動作しない場合

sudo apt-get install gcc-multilib 

あり、その後、Menu -> Administration -> Synaptic Package Managerに行き、その後、キーワードgcc-multilibを検索し、 Mark for Installation - >適用してください。

関連する問題