我试图将一些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
答案 0 :(得分:2)
不,您不需要在单独的文件中声明静态函数,因为那里的代码不需要知道任何有关它的信息。事实上,使函数静态的目的是将其保持在定义它的文件的本地:它不能被视为其他文件中的外部函数。
您收到的错误消息是关于找不到的fun1。编译和编译时,必须提供包含fun1的目标文件。 link separate.cpp。