32 位代码在 64 位 linux 机器上运行
32-bit code runs on 64-bit linux machine
我的 linux 是 64 位 Red Hat 6.5。海湾合作委员会是 4.4.7。我在 32 位机器上最初有一个代码 运行ning,这意味着,有很多从指针到 int 的转换。当我制作时,我得到 error: cast from ‘void*’ to ‘int’ loses precision
。我知道那是因为在 64 位中 OS 指针类型是 8 个字节。
我不想一一修复所有这些,因为太多了,所以我在 makefile CFLGAS 中添加了 -m32
标志,这使得 32 位代码 运行编译器默认配置为 64 位对象。
幸好这个编译错误消失了。但是,编译器给了我这个 main.o: could not read symbols: File in wrong format
。似乎这仍然是 32 位和 64 位之间的一些兼容问题。谁能告诉我如何解决这个问题?
这是我用于 gmake 的 makefile.common 的一部分:
CFLAGS = -m32 -g -Wall -Wshadow $(INCPATH) $(DEFINES) $(HOST) -DCHANGED
LDFLAGS = -m32
CPP= gcc -E -m32
CC = g++
LD = g++
AS = as --32
.......
S_OFILES = switch.o
OFILES = $(C_OFILES) $(S_OFILES)
$(PROGRAM): $(OFILES)
$(LD) $(OFILES) $(LDFLAGS) -o $(PROGRAM)
$(C_OFILES): %.o:
$(CC) $(CFLAGS) -c $<
你没有输入汇编代码是32位指令的链接器(g++)。
尝试:
CPP= gcc -E -m32
CC = g++ -m32
LD = g++
AS = as --32
我的 linux 是 64 位 Red Hat 6.5。海湾合作委员会是 4.4.7。我在 32 位机器上最初有一个代码 运行ning,这意味着,有很多从指针到 int 的转换。当我制作时,我得到 error: cast from ‘void*’ to ‘int’ loses precision
。我知道那是因为在 64 位中 OS 指针类型是 8 个字节。
我不想一一修复所有这些,因为太多了,所以我在 makefile CFLGAS 中添加了 -m32
标志,这使得 32 位代码 运行编译器默认配置为 64 位对象。
幸好这个编译错误消失了。但是,编译器给了我这个 main.o: could not read symbols: File in wrong format
。似乎这仍然是 32 位和 64 位之间的一些兼容问题。谁能告诉我如何解决这个问题?
这是我用于 gmake 的 makefile.common 的一部分:
CFLAGS = -m32 -g -Wall -Wshadow $(INCPATH) $(DEFINES) $(HOST) -DCHANGED
LDFLAGS = -m32
CPP= gcc -E -m32
CC = g++
LD = g++
AS = as --32
.......
S_OFILES = switch.o
OFILES = $(C_OFILES) $(S_OFILES)
$(PROGRAM): $(OFILES)
$(LD) $(OFILES) $(LDFLAGS) -o $(PROGRAM)
$(C_OFILES): %.o:
$(CC) $(CFLAGS) -c $<
你没有输入汇编代码是32位指令的链接器(g++)。
尝试:
CPP= gcc -E -m32
CC = g++ -m32
LD = g++
AS = as --32