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

时间:2014-08-01 17:35:55

标签: c++

我试图将一些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)文件的开头。

  • 问题:我还应该写

    extern double fun2(double a,double b,int c);

separate.cpp的开头,如果有,怎么样? (我还应该在static旁边的<{1}}

旁边添加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

1 个答案:

答案 0 :(得分:2)

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

您收到的错误消息是关于找不到的fun1。编译和编译时,必须提供包含fun1的目标文件。 link separate.cpp。