2012-09-27 61 views
2

在运行make命令,我得到下面的输出,如何解释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运行。

我的系统有问题吗?

回答

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

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

1

看起来像其中一个链接的文件是不同的二进制输出比其余的。确保在编译时不要将标志设置为g++,并且如果它是一致的。一旦你这样做,再次运行make cleanmake以确保它以正确的输出类型重建所有的二进制文件。

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