/ links静态函数c ++的问题

时间:2009-11-14 00:41:29

标签: c++ function static g++ linker

我正在尝试构建一个小程序,我有自己的库libfoo。我有一个从我的Vector3类调用静态函数的相机类(即crossProduct)。我的相机类和Vector3类编译好,并内置到libfoo中。但是当我像这样链接时:

g++ -g -O2 -o test1 main.o -lfoo

我明白了:

libfoo.so: undefined reference to 
foo::Vector3::dotProduct(foo::Vector3 const&, foo::Vector3 const&)

现在Vector3.h中的函数是:

static Vector3 crossProduct(const Vector3 &v1, const Vector3 &v2);并且在...内 类定义......它在Vector3.cpp中定义。

程序很好,直到我在Camera.cpp中调用这个静态函数。为了解决这个问题,我必须将Vector3.cpp中的代码从头文件中的代码更改为:

Vector3 Vector3::crossProduct(const Vector3 &v1, const Vector3 &v2)它编译,链接并运行正常。

Vector3类是由其他人为Windows编译器编写的,但我已将其移至Linux。这是一个g ++的东西吗?还是坏代码?

TIA。

1 个答案:

答案 0 :(得分:1)

听起来你的vector3.cpp文件最初有以下内容:

Vector3 crossProduct(const Vector3 &v1, const Vector3 &v2)
{
    ...
}

你必须改为:

Vector3 Vector3::crossProduct(const Vector3 &v1, const Vector3 &v2)
{
    ...
}

前者只是定义了一个名为crossProduct的独立函数,而后者定义了一个名为crossProduct的Vector3成员函数。后者是正确的,我猜测原始代码是错误的。