【问题标题】:Why does GCC seem much more verbose in Ubuntu 10?为什么 GCC 在 Ubuntu 10 中显得更加冗长?
【发布时间】:2010-11-19 12:15:32
【问题描述】:

我最近做了一个 cp 克隆(用于大学),我碰巧发现了一些我从未有机会接触到的东西。

这至少适用于 GCC 编译 C 源代码。

我在 Mac OS X (10.6.4) 中完成了这个特定 C 程序的主要开发,使用 Apple 的 /usr/bin/gcc --version 构建

i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5664)
Copyright (C) 2007 Free Software Foundation, Inc.

但是,我在 Mac 中的 Arch Linux 虚拟机中运行测试,使用最新的 gcc(没有添加、没有自定义、没有像 Apple 那样的模组)

gcc (GCC) 4.5.1
Copyright (C) 2010 Free Software Foundation, Inc.

我们必须在 Ubuntu 10.04.1 LTS 的类中构建它。

我的 Makefile 是这样的:

CC=gcc
#CFLAGS=-O0 -g -Wall
CFLAGS=-O3 -Wall -finline-functions
EXE=copy

compile:
    $(CC) $(CFLAGS) -o $(EXE) main.c

所以,我总是在启用-Wall 的情况下运行(在每个操作系统中)gcc。 Mac 和 Arch 从未显示任何警告。

Ubuntu 打印了两个警告,有 和没有 -Wall

do_copy.c: In function 'do_copy_file2file':
do_copy.c:27: warning: ignoring return value of 'realpath', declared with attribute warn_unused_result
do_copy.c: In function 'do_copy_symlink2file':
do_copy.c:117: warning: ignoring return value of 'symlink', declared with attribute warn_unused_result

Ubuntu 的 GCC 版本是发行版的默认版本: gcc (Ubuntu 4.4.3-ubuntu5) 4.4.3

为什么会这样?

为什么我在其他两个操作系统中没有看到任何警告,而在 Ubuntu 中却看到了?

【问题讨论】:

  • 警告信息中有线索。
  • @Paul:OP 不是询问警告的含义,而是询问为什么它们出现在一个特定的环境中。这些警告非常偏执,通常不会出现,即使是-Wall
  • @Marcelo:是的,正如我所说,从警告消息中很容易看出原因 - /usr/include/stdlib.h 和 /usr/include/unistd 中的 realpath 和 symlink 声明.h 在较新的发行版中具有 warn_unused_result 属性。
  • @Paul “较新的发行版”是否仅意味着 Ubuntu?因为 Arch 有一个更新的 gcc 实现。却什么也没说。
  • @ssice:我不知道 - 我原以为大多数当前的发行版现在都有这个 - 看看 /usr/include 中的一些标题。

标签: macos gcc ubuntu archlinux


【解决方案1】:

Ubuntu 强制执行一些 CFLAGS,如您所见 here

【讨论】:

  • 我试图(一次)将所有标志都放入 wiki,但 Arch 和 Mac 都没有抱怨任何事情。
  • @ssice 有时,根据平台的不同,相同的选项会有不同的语义/含义。以 -fPIC-fpic 选项为例。我确实想知道您是否要清除 CFLAGS,尽管它不会在 Ubuntu 下显示。无论是否只是后者在警告方面更具侵略性。我相信你现在已经明白了,但也许值得提醒的是,不同的平台可能会改变一些事情。并且不同版本的 GCC 也更具限制性(也许您尝试过的版本相同);当然它有更多的限制,这实际上是好的。
猜你喜欢
  • 2012-09-01
  • 2012-09-02
  • 2017-08-12
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-24
  • 2012-05-26
  • 1970-01-01
相关资源
最近更新 更多