c++ - 32 位代码在 64 位 linux 机器上运行

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

我的 Linux 是 64 位 Red Hat 6.5。海湾合作委员会是 4.4.7。我有一个最初在 32 位机器上运行的代码,这意味着,有很多从指针到 int 的转换。当我创建时,我得到了错误:从‘void*’到‘int’的转换失去了精度。我知道这是因为在 64 位操作系统中指针类型是 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

关于c++ - 32 位代码在 64 位 linux 机器上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29640561/

相关文章:

c++ - 在 Qt : Can I output to `stdout` , 中,我可以使用 qDebug() 输出到 `stderr` 吗?

c++ - 从 C++ 到 C:替代 std::map?

c++ - 获取 Hugepagesize 的 Linux API

你能让一个递增的编译器常量吗?

c - 从文件系统中随机选择一个文件

c++ - 为什么lnk图标不能正常显示?

c++ - 多任务处理和测量时差

c++ - 初始化字符串的静态常量列表

linux - 在 Perl 中等待输入的定义时间段

ruby-on-rails - 无法在 Linux 上安装 rabbitmq-server(Oracle Linux Server 版本 6.7/RHEL)