如何解释make命令生成的输出?

时间:2012-09-27 03:20:34

标签: c bash makefile ubuntu-12.04

在运行make命令时,我得到以下输出,

g++ -DUNIX -Wall -g -I../include -I. main.o hfpage.o hfp_driver.o                      test_driver.o db.o new_error.o page.o system_defs.o buf.o -o hfpage 

/usr/bin/ld: Warning: size of symbol `error_string_table::error_string_table(Status, char const**)' changed   from 18 in db.o to 34 in buf.o
/usr/bin/ld: i386:x86-64 architecture of input file `buf.o' is  incompatible with i386 output
collect2: ld returned 1 exit status
make: *** [hfpage] Error 1

此文件生成hfpage.o,当我尝试使用./hfpage.o运行时,收到错误消息bash: ./hfpage.o: cannot execute binary file

我的系统有问题吗?

3 个答案:

答案 0 :(得分:1)

好的,首先,错误消息显示buf.o是为另一个体系结构编译的,可能是64位计算机上的32位。

无法运行./hprof.o的原因是hprof.o是二进制对象,而不是可执行文件。如果此编译已完成,则由于您没有-o标志,因此可执行文件将命名为a.out,由于历史原因,该可执行文件是UNIX可执行文件的默认名称。

你的问题可能出现在make文件的早期步骤中。基本上,你应该有几行像

main.o: 
   g++ -DUNIX -Wall -g -I../include -I. -c main.C

然后是最后一行,如

main:
   g++ -DUNIX -Wall -g -o main main.o hfpage.o hfp_driver.o

架构消息建议您使用不同的编译器或编译器标志编译buf.o

答案 1 :(得分:1)

您正在尝试使用x86-64版本的库为i386架构构建应用程序。很可能你错误​​地安装了x86-64库。

答案 2 :(得分:1)

看起来其中一个链接的文件具有与其余文件不同的二进制输出。确保在编译时没有为-m32 or -m64设置g++标记,如果是,那么它是一致的。完成此操作后,再次运行make cleanmake,以确保以正确的输出类型重建所有二进制文件。

此外,您不应该执行.o个文件,因为它们通常是二进制对象而不是可执行文件。检查Makefile中的目标,找出可执行文件应该是什么。