6

ブロックを使用するコードをコンパイルするときに -fblocks を使用する必要があることを (以下で) 発見しました。

リンカーが _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)
4

3 に答える 3

6

Clang は、オペレーティング システムのサポートが組み込まれていないプラットフォーム (SnowLeopard など) でブロックを使用する簡単な方法をまだ提供していません。libdispatch プロジェクトの詳細については、http://libdispatch.macosforge.org/ を参照して ください。 また、compiler-rt プロジェクト (ブロックのランタイムを提供します) については、 http: //compiler-rt.llvm.org/を参照してください。 しかし、これはまだ Clang エンド ユーザー向けに十分にパッケージ化されていません。

少し掘り下げたい場合は、compiler-rt プロジェクトにブロック ランタイムが含まれており、それを使用して NSConcreteStackBlock を提供するライブラリを構築できます。

于 2010-02-20T06:34:33.047 に答える
4

http://mackyle.github.com/blocksruntime/の手順に従って、リンクできる libBlocksRuntime.a ライブラリをビルドします。

于 2011-09-20T07:40:32.240 に答える