【问题标题】:How to know if make is using gcc or g++如何知道make是使用gcc还是g++
【发布时间】:2010-09-13 06:20:40
【问题描述】:

如果我运行 make 那么我如何判断使用的是 gcc 还是 g++?我试图查看 Makefile 但没有找到任何东西。

这是 make 的输出。我也想不通。

cd threads; make depend
make[1]: Entering directory `/home/anthony/nachos-4.0/code/threads'
g++ -I../lib -I../threads -I../machine -DTHREADS -Dx86 -DLINUX -DCHANGED -M ../lib/bitmap.cc ../lib/debug.cc ../lib/hash.cc ../lib/libtest.cc ../lib/list.cc ../lib/sysdep.cc ../machine/interrupt.cc ../machine/stats.cc ../machine/timer.cc ../threads/alarm.cc ../threads/kernel.cc ../threads/main.cc ../threads/scheduler.cc ../threads/synch.cc ../threads/synchlist.cc ../threads/thread.cc ../machine/elevatortest.cc ../machine/elevator.cc > makedep
In file included from ../lib/debug.h:18,
                 from ../lib/bitmap.cc:10:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../lib/debug.h:18,
                 from ../lib/debug.cc:11:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../lib/debug.h:18,
                 from ../lib/list.h:17,
                 from ../lib/libtest.cc:12:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../lib/debug.h:18,
                 from ../lib/sysdep.cc:27:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../lib/debug.h:18,
                 from ../lib/list.h:17,
                 from ../machine/interrupt.h:39,
                 from ../machine/interrupt.cc:24:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../lib/debug.h:18,
                 from ../machine/stats.cc:11:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../lib/debug.h:18,
                 from ../threads/main.h:13,
                 from ../machine/timer.cc:24:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../lib/debug.h:18,
                 from ../threads/main.h:13,
                 from ../threads/alarm.cc:13:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../lib/debug.h:18,
                 from ../threads/kernel.cc:9:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../lib/debug.h:18,
                 from ../threads/main.h:13,
                 from ../threads/main.cc:21:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../lib/debug.h:18,
                 from ../threads/scheduler.cc:22:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../threads/thread.h:42,
                 from ../threads/synch.h:21,
                 from ../threads/synch.cc:36:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../lib/debug.h:18,
                 from ../lib/list.h:17,
                 from ../threads/synchlist.h:14,
                 from ../threads/synchlist.cc:13:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../threads/thread.h:42,
                 from ../threads/thread.cc:20:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../lib/debug.h:18,
                 from ../lib/list.h:17,
                 from ../machine/elevator.h:24,
                 from ../machine/elevatortest.cc:13:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../lib/debug.h:18,
                 from ../lib/list.h:17,
                 from ../machine/elevator.h:24,
                 from ../machine/elevator.cc:11:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
make[1]: *** [depend] Error 1
make[1]: Leaving directory `/home/anthony/nachos-4.0/code/threads'
make: *** [all] Error 2

【问题讨论】:

  • 第三行是g++,文件都是.cc,所以需要g++。
  • 这是否意味着它没有使用gcc?
  • 我怀疑你真正的问题是为什么找不到 iostream.h 头文件。我修改了我的答案来回答这个问题。如果事实证明这是您的问题,我将在此处修改问题,以便人们在搜索时可以找到它。

标签: gcc g++ makefile


【解决方案1】:

Make 应该吐出它正在运行的命令行。这些应该告诉你它正在调用什么编译器。

既然你发布了它们,现在很明显 make 正在调用 g++。此外,文件g++ 正在编译以.cc 结尾,因此g++ 前端中为.c 文件调用C 编译器的代码将不会被激活。

我敢打赌,您感到困惑的是无法找到 iostream.h 的事实。由于各种奇怪的原因,标准委员会决定在标准头文件的名称中删除.h。大多数编译器在之后的相当长一段时间内仍然支持使用.h,以避免破坏旧代码。但这在过去几年中已被放弃,部分原因是几乎所有包含 .h 版本的头文件的程序也不希望符号位于 ::std 命名空间中。

另外,大多数人已经停止使用 C++ 的 .cc 扩展(我对此感到非常难过,我喜欢它)。结合这些事情告诉我,您正在尝试编译为旧的、预标准 C++ 编译器编写且从未更新过的代码。如果您想编译代码,则需要进行少量的移植工作。

移植工作的第一步是将#include <iostream.h> 替换为#include <iostream>。还包括标准 C 库头文件,如 stdlib.h 应替换为包括 C++ 版本,如 cstdlib

但它还会有更多。代码可能会期望 cerrcout 之类的内容位于根级命名空间中,而后标准 C++ 将它们放在 ::std 命名空间中。您将不得不修复代码以使用该命名空间。

幸运的是,所有这些事情都可能会因为缺少包含文件或找不到符号而产生编译器错误,所以这不会太难。

我刚查了nachos library你好像在编译,确实很老了,很久没有更新了。他们提到的编译器是 gcc 2.6,这是一个绝对古老的编译器。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-25
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
相关资源
最近更新 更多