あなたはブロックを使用して打ち鳴らすプログラムのためにリンクするためにどのライブラリを必要とします
-
21-09-2019 - |
質問
私は(下)私はブロックを使用してコードをコンパイルするとき-fblocksを使用する必要があることを発見しました。
どのようなライブラリーIは、リンカー解決_NSConcreteStackBlockを聞かせすることに対してリンクする必要がありますか? (上のUbuntu 9.10 AMD64。)
chris@chris-desktop:~$ clang ctest.c
ctest.c:3:25: error: blocks support disabled - compile with -fblocks or pick a
deployment target that supports them
void call_a_block(void (^blockptr)(int)) {
^
ctest.c:11:19: error: blocks support disabled - compile with -fblocks or pick a
deployment target that supports them
call_a_block( ^(int y) {
^
2 diagnostics generated.
chris@chris-desktop:~$ clang ctest.c -fblocks
/tmp/cc-4sPSeO.o: In function `main':
ctest.c:(.text+0x79): undefined reference to `_NSConcreteStackBlock'
collect2: ld returned 1 exit status
clang: error: linker command failed with exit code 1 (use -v to see invocation)
解決
クランはまだ組み込まれていないオペレーティングシステムのサポート(例えば、SnowLeopard)プラットフォーム上でブロックを使用する簡単な方法を提供していません。あなたはここにlibdispatchプロジェクトにいくつかのより多くの情報を見つけることができます。 http://libdispatch.macosforge.org/する そして、ここで(ランタイムブロックを提供)コンパイラ-RTプロジェクトに: http://compiler-rt.llvm.org/する しかし、これはまだうまくクランのエンドユーザーのためにパッケージされていません。
あなたは少し掘るしたい場合は、、コンパイラ-RTプロジェクトは、ブロックを持っていることで実行時、あなたはNSConcreteStackBlockを提供しますライブラリーを構築するためにそれを使用することができます。
他のヒント
ビルドaに http://mackyle.github.com/blocksruntime/ までの手順を使用しますあなたがリンクすることができlibBlocksRuntime.aライブラリます。
とUbuntuの上libBlocksRuntimeをインストールします。
sudo apt-get install llvm
sudo apt-get install clang
sudo apt-get install libblocksruntime-dev
、コンパイルライブラリと-fblocksを含めるには:
clang ctest.c -fblocks -lBlocksRuntime
これは、他のオペレーティングシステムでも使用可能です。 FreeBSDとMidnightBSDの両方が
打ち鳴らすとlibBlocksRuntime.soが含まれます