я установил libnoise на windows с code :: blocks
и при компиляции выдает ошибку:
undefined reference to `noise::module::Perlin::Perlin()'
undefined reference to `noise::module::Perlin::GetValue(double, double, double) const'
undefined reference to `vtable for noise::module::Perlin'
undefined reference to `noise::module::Module::~Module()'
но ссылки в perlin.h
заголовочный файл
Как я могу решить эту проблему?
В Windows libnoise поставляется с файлом * .def, который заботится об экспорте символов. Но когда я попытался скомпилировать библиотеку в 64-битной версии этим утром, оказалось, что этот механизм не работает.
Мне пришлось «вручную» экспортировать символы класса:
Шаги для экспорта символов libnoise:
. Определите переменную препроцессора LIBNOISE_EXPORT
при компиляции библиотеки как общей библиотеки не добавляйте ее при компиляции проекта, который использования библиотека
. Добавьте несколько макросов экспорта в заголовок верхнего уровня библиотеки (например, basictypes.h):
#if defined(WIN32)
# ifdef LIBNOISE_EXPORT
# define LIBNOISE_DLL __declspec(dllexport)
# else
# define LIBNOISE_DLL __declspec(dllimport)
# endif
#else
# define LIBNOISE_DLL
#endif
. Добавьте макрос LIBNOISE_DLL перед определением класса:
class LIBNOISE_DLL Perlin: public Module
{
...
И это помогло мне
примечание: не используйте файл * .def в процессе компиляции, если вы попробуете это решение