2017-07-31 81 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),但我不能有用地運行列出可能的非標準替代品列表。檢查您的系統/實施的文檔的這種信息。 –