ما هي المكتبات التي تحتاج إلى ربطها لبرنامج Clang باستخدام الكتل
-
21-09-2019 - |
سؤال
لقد اكتشفت (أدناه) أنني بحاجة إلى استخدام -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