32位代码在64位Linux机器上运行

时间:2015-04-15 02:25:00

标签: c++ c linux makefile 32bit-64bit

我的linux是64位Red Hat 6.5。海湾合作委员会是4.4.7。我有一个最初在32位机器上运行的代码,这意味着,从指针转换到int有很多转换。当我做的时候,我得到error: cast from ‘void*’ to ‘int’ loses precision。我知道这是因为在64位OS指针类型是8个字节。

我不想一个一个地修复所有这些,因为有太多,所以我在makefile CFLGAS中添加-m32标志,这使得32位代码在配置为64的编译器上运行默认情况下为-bit对象。

好的是这个编译错误消失了。但是,编译器给了我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 $<

1 个答案:

答案 0 :(得分:3)

您没有输入汇编代码为32位指令的链接器(g ++)。

尝试:

CPP= gcc -E -m32
CC = g++ -m32
LD = g++ 
AS = as --32