-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");
}
您需要'gcc-multiarch'軟件包,而不僅僅是'gcc',以便引入所有庫。軟件包名稱可能因發行版而異,但是這個具體的答案適用於Debian/Ubuntu(其中包括Mint)。 – o11c
並且不要在同一個問題中提出多個問題。讓他們分開提問。 – o11c
Rasp上的「expected string literal」錯誤很可能是因爲您在那裏使用了單引號(即您顯示的代碼不是您嘗試編譯的代碼)。 – DevSolar