【问题标题】:How to interpret this output generated by make command?如何解释 make 命令生成的这个输出?
【发布时间】:2012-09-27 03:20:33
【问题描述】:

在运行 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

我的系统有问题吗?

【问题讨论】:

    标签: c bash makefile ubuntu-12.04


    【解决方案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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        看起来被链接的文件之一的二进制输出与其他文件不同。确保在编译时没有为g++ 设置-m32 or -m64 标志,并且如果你是,它是一致的。执行此操作后,再次运行 make cleanmake 以确保它以正确的输出类型重建所有二进制文件。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-12
          • 1970-01-01
          • 2022-07-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多