ما هي المكتبات التي تحتاج إلى ربطها لبرنامج Clang باستخدام الكتل

StackOverflow https://stackoverflow.com/questions/2297765

سؤال

لقد اكتشفت (أدناه) أنني بحاجة إلى استخدام -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)
هل كانت مفيدة؟

المحلول

لا يوفر Clang بعد طريقة سهلة لاستخدام الكتل على المنصات التي لا تملك دعم نظام التشغيل المدمج (على سبيل المثال ، Snowleopard). يمكنك العثور على مزيد من المعلومات حول مشروع LibDispatch هنا: http://libdispatch.macosforge.org/وعلى مشروع التحويل البرمجي (الذي يوفر وقت تشغيل الكتل) هنا: http://compiler-rt.llvm.org/ولكن هذا لم يتم تعبئته جيدًا للمستخدمين النهائيين.

إذا كنت ترغب في الحفر قليلاً ، فإن مشروع برنامج التحويل البرمجي RT يحتوي على وقت تشغيل الكتل فيه ، ويمكنك استخدام ذلك لإنشاء مكتبة توفر NSConcretestackBlock.

نصائح أخرى

استخدم التعليمات في http://mackyle.github.com/blocksruntime/ لبناء libblocksruntime. مكتبة يمكنك ربطها بها.

تثبيت 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 على حد سواء تشمل clang و libblocksruntime

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top