gcc 4.8.1将.c文件编译为c++;在ubuntu 12.04中

gcc 4.8.1将.c文件编译为c++;在ubuntu 12.04中,gcc,g++,ubuntu-12.04,language-interoperability,gcc4.8,Gcc,G++,Ubuntu 12.04,Language Interoperability,Gcc4.8,我的一个用户在使用GCC4.8.1在Ubuntu12.04上编译我们的混合C/C++代码库的C部分时,收到了一条错误消息 我们在C++中有一个C链接函数库,想编译一个C程序链接到它。该库是用g++编译的,构建得很好。c程序失败如下: > gcc -O3 -g -fPIC -I/media/Repo/lcdm/code/cosmosis/ -Wall -Wextra -pedantic -Werror -std=c99 -o c_datablock_t c_datablock_test.c

我的一个用户在使用GCC4.8.1在Ubuntu12.04上编译我们的混合C/C++代码库的C部分时,收到了一条错误消息

<>我们在C++中有一个C链接函数库,想编译一个C程序链接到它。该库是用g++编译的,构建得很好。c程序失败如下:

> gcc -O3 -g -fPIC -I/media/Repo/lcdm/code/cosmosis/ -Wall -Wextra -pedantic -Werror -std=c99 -o c_datablock_t c_datablock_test.c -L . -lcosmosis

cc1plus: error: command line option ‘-std=c99’ is valid for C/ObjC but not for C++ [-Werror]
<>程序有一个较低的.C文件后缀,那么为什么GCC会尝试编译它为C++?我们还没有在其他操作系统上看到这一点


(我知道我们可以通过删除-Werror或使用-x c处理这个特定文件来解决这个问题,但我想解决真正的问题。)

这看起来像GCC Bug 54641,在以后的GCC版本中已经修复。这只是一个警告,但编译标志导致GCC将所有警告视为错误

为什么gcc试图将其编译为c++

我只能想出两个合理的解释,它们都是最终用户的错

  • 可能是用户通过Windows传输了数据源,文件名为
    C\u DATABLOCK\u TEST.C
    ,用户误导了您
  • 也可能是用户用
    g++
    重写了他的
    gcc
    (令人惊讶的是,许多人认为
    gcc
    g++
    是一回事,但事实并非如此)
要反驳第一种可能性,请要求用户在
script
下执行其构建命令,并将生成的
typescript
发送给您


为了反驳第二个错误,请用户向compile命令添加
-v

如果复制/粘贴此处发布的一行以在适当目录的终端中编译文件,是否会出现相同的错误?谢谢,否-我已要求用户尝试。这看起来与gcc错误54641完全不同