我遇到了一个编译问题,这些代码来自同一位教授,但是我的同学只有我可以编译它,这就是我试图找出的问题。
我将Surface Pro1(intel i5 4G Ram)与LinuxMint 18.2 64位OS(gcc版本5.4.0)一起使用,但是有些我无法使用命令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");
}
最佳答案
我的解决方案是
sudo apt-get install gcc-multilib
如果以上命令在您的LinuxMint18.2上不起作用,请转到
Menu -> Administration -> Synaptic Package Manager
,然后搜索关键字gcc-multilib
和Mark for Installation
-> Apply。关于c - 为什么选项-m32在我的Linux操作系统上不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45911539/