为什么gcc不给我警告或错误?

use*_*947 1 c++ gcc

我创建了共享库:

lib.h:

int fun( int a, int b);
Run Code Online (Sandbox Code Playgroud)

lib.cpp:

#include <lib.h>

int fun ( int a, int b)
{
    return a+b;
}
Run Code Online (Sandbox Code Playgroud)

编译它:

gcc -fPIC -c lib.cpp gcc -shared -o -I ./header lib.so lib.o

我的lib.h位于./header中.因此,汇编已经成功.之后我改变了lib.cpp:

#include <lib.h>

int fun ( int a)
{
    return a;
}
Run Code Online (Sandbox Code Playgroud)

但什么也没发生.我想看到错误消息或警告.为什么?

Joh*_*ica 7

在C++中,定义具有相同名称但不同参数的第二个函数是合法的.在C中,编译库时会出错,但在C++中则不然.

现在使用任何一种语言,任何使用您的库的人都会得到一个未定义的符号错误.标头中列出的功能未在任何地方定义.

  • @ user3450947但是你正在编译一个.cpp文件.gcc推断扩展中的语言.如果要编译为C,请调用文件`lib.c`或使用`-xc`选项. (3认同)
  • gcc是驱动程序.它根据源文件的扩展名调用C前端或C++前端(或者您可以指定它).`gcc foo.cpp`几乎与`g ++ foo.cpp`完全相同,只是后者添加了一些在使用C++库时需要的选项. (2认同)