2017-07-31 8 views
-1

私はポリベンチカーネルを使用しています。 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()は、標準Cの一部ではなく、POSIXの一部として標準化されていることに驚くことはありません。したがって、その機能を提供することは、Cの実装に準拠するための要件ではありません。一方、POSIXの一部として、は広く利用できるです。

malloc()は、任意のタイプのオブジェクトに対して適切に位置合わせされたメモリへのポインタを返すことを約束します。なぜより強力なアライメント要件を確実にしたいのか分かりませんが、そのための次の最良の賭けはaligned_alloc()関数です。これはC2011以降の標準Cです。お使いのCライブラリは、C2011に準拠している場合は、どちらか、aligned_alloc()を持っていない場合は、あなたが

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

// ... 

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

であなたのposix_memalign()コールを置き換えることができ、その後、あなたの実装は、他の選択肢を提供することができるが、それらのどれも標準装備されていません。

+0

aligned_allocを使用しましたが、問題はLLVMコンパイラがそれらを受け入れないことです。 –

+0

これはコンパイラの問題ではないようです。@ R.Omar。むしろ、システムのCライブラリによってどのような関数が提供されているのかという問題のように見えます。実際には利用できない機能は呼び出すことができません。ここで便利な情報が見つかるかもしれません:[ClangでC++ 11の機能を使うにはどうすればいいですか?](https://stackoverflow.com/q/10408849/2402272)(ただしC言語ではなくC言語ではありますが)可能性のある非標準的な選択肢の一覧を表示します。そのような情報については、システムの/実装のドキュメントを確認してください。 –

関連する問題