【发布时间】:2009-11-14 00:41:28
【问题描述】:
我正在尝试构建一个小程序,并且我有自己的库 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。
【问题讨论】:
-
未定义对“dotProduct”的引用,但函数是“crossProduct”?
-
您更改了 Vector3.cpp,但您只向我们展示了您的新版本,而不是原始版本。因此我们只能推测。
标签: c++ function static g++ linker