在c++中调用extern(静态)函数

calling an extern (static) function in c++

本文关键字:静态 函数 extern c++ 调用      更新时间:2023-10-16

我想把一些c++函数放在一起。我有一个包含以下两个函数的文件:

double fun1(double *x, int y, double *z){
....
}

static
double fun2(double a, double b, int c){
...
}

现在,fun1调用fun2。我想在一个单独的文件(separate.cpp)中使用fun1,所以我这样做:

extern double fun1(double *x, int y, double *z);

在该(separate.cpp)文件的开头。

  • 问题:我是否也应该写

separate.cpp开头,如果是,如何?(我也应该包括static关键字在那里,旁边的extern ?)

我认为我的主要问题是我以前从未使用过static函数,所以我真的不知道如何处理它们。

当前,代码编译,但加载后我得到:

unable to load shared object '/R/x86_64-pc-linux-gnu-library/3.1/abc/libs/abc.so':
  /R/x86_64-pc-linux-gnu-library/3.1/abc/libs/abc.so: undefined symbol: _Z6fun1PdiS_Pi

不,您不需要在单独的文件中声明静态函数,因为那里的代码不需要知道它的任何信息。实际上,使函数成为静态的目的是使它在定义它的文件中保持本地:它不能在其他文件中被视为外部函数。

您得到的错误消息是关于未找到的fun1。编译&时必须提供包含fun1的目标文件。separate.cpp链接。