对Perlin的c ++ libnoise错误

时间:2015-01-11 01:02:03

标签: c++ perlin-noise

我使用code :: blocks

在windows上安装了libnoise

在编译时会出错:

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头文件

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

在Windows上, libnoise 附带一个* .def文件,负责导出符号。但是当我今天早上试图用64位编译lib时,似乎这种机制不起作用。 我必须“手动”导出类符号:

导出libnoise符号的步骤:

。在将lib编译为共享库时定义预处理器变量LIBNOISE_EXPORT,在编译使用 lib的项目时不要添加它

。在lib的顶级标题中添加一些导出宏(例如,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文件