2017-08-28 111 views
-2

我遇到了一个编译问题,这些代码来自同一位教授,但我的同班同学能够编译它,但我,这是我试图找出。为什么选项-m32不能在我的linux操作系统上工作?

我用LinuxMint 18.2 64位操作系统,gcc版本5.4.0使用我的Surface Pro1(英特尔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-multiarch'软件包,而不仅仅是'gcc',以便引入所有库。软件包名称可能因发行版而异,但是这个具体的答案适用于Debian/Ubuntu(其中包括Mint)。 – o11c

+1

并且不要在同一个问题中提出多个问题。让他们分开提问。 – o11c

+0

Rasp上的“expected string literal”错误很可能是因为您在那里使用了单引号(即您显示的代码不是您尝试编译的代码)。 – DevSolar

回答

0

我的解决方案是

sudo apt-get install gcc-multilib 

如果上述命令不工作对你LinuxMint18.2,然后去Menu -> Administration -> Synaptic Package Manager,然后搜索关键字gcc-multilibMark for Installation - >应用。

相关问题