2017-07-31 47 views
-1

我使用polybench内核。在polybench.c中,代码的行数如下:posix_memalign,malloc和calloc与lli解释器有问题

int ret = posix_memalign (&new, 32, num); 

这行代码会导致lli解释器出现问题。我试图使用malloc代替,但我有同样的错误

LLVM ERROR: Tried to execute an unknown external function: posix_memalign 

是否有任何其他的功能,而不必此问题可以使用?

回答

0

如果您知道posix_memalign()作为POSIX的一部分而不是标准C的一部分进行标准化,您不会感到惊讶。因此,提供该功能并不是遵从C实现的要求。另一方面,作为POSIX的一部分,其广泛可用。

malloc()承诺会返回一个指向内存的指针,以正确对齐任何类型的对象。我不确定为什么你要确保更强的对齐要求,但你的下一个最好的选择是aligned_alloc()函数,这是自C2011以来的标准C.如果你的C函数库符合C2011,那么你就可以

#include <stdlib.h> 
#include <errno.h> 

// ... 

new = aligned_alloc(32, num); 
int ret = (new ? 0 : errno); 

更换您的通话posix_memalign()如果你没有aligned_alloc(),或者说,那么你的实现可以提供其他的替代品,但他们都不是标准的。

+0

我使用的是aligned_alloc,问题在于LLVM编译器不接受它们。 –

+0

这似乎不是一个编译器问题,@ R.Omar。相反,它看起来像是系统C库提供了什么功能的问题。您不能调用实际上不可用的函数。您可能会在这里找到有用的信息:[我如何在Clang中使用C++ 11功能?](https://stackoverflow.com/q/10408849/2402272)(即使它是关于C++,而不是C),但我不能有用地运行列出可能的非标准替代品列表。检查您的系统/实施的文档的这种信息。 –