如何在Solaris 10上替换posix_memalign

时间:2018-10-01 10:38:33

标签: c++ c solaris solaris-10

我有以下代码是CRFsuite库的一部分。我已经为此库创建了R包装器,但是由于在Solaris 10上未定义posix_memalign,因此在Solaris 10上安装失败。 如何更改以下代码(https://github.com/bnosac/crfsuite/blob/master/src/crf/src/vecmath.h的一部分)才能在Solaris 10上正确编译?仅供参考安装错误显示here

#include <math.h>
#include <memory.h>

#if defined(_MSC_VER) || defined(__MINGW32__) || defined(__MINGW64__)
#include <malloc.h>
#else
#include <stdlib.h>
static inline void *_aligned_malloc(size_t size, size_t alignment)
{
    void *p;
    int ret = posix_memalign(&p, alignment, size);
    return (ret == 0) ? p : 0;
}
static inline void _aligned_free(void *p)
{
    free(p);
}
#endif

我尝试使用一些here可用的修复程序,但是失败了。希望您能提供帮助。

1 个答案:

答案 0 :(得分:3)

您应该可以使用memalign()

... 
#elif defined __SunOS_5_10
    #include <stdlib.h>

    static inline void *_aligned_malloc(size_t size, size_t alignment)
    {
        return memalign(alignment, size)
    }
    static inline void _aligned_free(void *p)
    {
        free(p);
    }
#else 
 ...