Я пытаюсь собрать небольшую программу, и у меня есть собственная библиотека 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 ++? Или плохой код?
ТИА.