проблема со связью статической функции g ++ - PullRequest
2 голосов
/ 14 ноября 2009

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

ТИА.

1 Ответ

1 голос
/ 14 ноября 2009

Похоже, ваш файл vector3.cpp изначально имел следующее:

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

который вы должны были изменить на:

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

Первая просто определяет отдельную функцию, называемую crossProduct, тогда как вторая определяет функцию-член Vector3, называемую crossProduct. Последнее верно, и то, что я предполагаю, что исходный код был неверным.

...