عبر تجميع libgcrypt على اي فون ؟ رابط خطأ... لا يمكن أن يبدو للعثور على "fwrite" و "strerror"?

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

سؤال

لدي بنجاح عبر تجميع أباتشي المحمولة وقت التشغيل (أبريل) للحصول على اي فون, باستخدام مجموعة من تكوين البرامج النصية التي تحتج جنو Autotools "./تكوين" اللازمة عبر تجميع الخيارات.

أنا الآن تحاول عبر تجميع GNUTLS الذي يعتمد على libtasn1 على libgcrypt ، والذي بدوره يعتمد على libgpg-خطأ.هذا هو المكان الذي أنا الوقوع في مشاكل و يمكن استخدام مساعدتكم...

أنا حاليا أحاول عبر تجميع libgpg-خطأ.تكوين البرامج النصية التي تستخدم قبل العمل جميل ؛ إن "./تكوين" اكتمال عملية نظيفة.المشاكل تحدث عند تشغيل "جعل".عند تشغيل تجعل كل شيء يبدو تجميع ، ولكن بعد ذلك الحصول التالية سيئة خطأ linker في النهاية:

/bin/sh ../libtool --tag=CC   --mode=link /Users/michaelsafyan/Downloads/libgpg-error-1.7/compile /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2  -std=c99 -arch armv6 -pipe -no-cpp-precomp --sysroot='/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk' -isystem /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/lib/gcc/arm-apple-darwin9/4.2.1/include/ -isystem /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/include -isystem /Developer/Platforms/iPhoneOS.platform/Developer/usr/include -isystem /opt/iphone-3.0/include -isystem /usr/local/iphone-3.0/include  -arch armv6 --sysroot='/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk' -L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/lib -L/Developer/Platforms/iPhoneOS.platform/Developer/usr/lib -L/opt/iphone-3.0/lib -L/usr/local/iphone-3.0/lib -o gpg-error gpg_error-strsource-sym.o gpg_error-strerror-sym.o gpg_error-gpg-error.o  ./libgpg-error.la  
/Users/michaelsafyan/Downloads/libgpg-error-1.7/compile /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 -std=c99 -arch armv6 -pipe -no-cpp-precomp --sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk -isystem /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/lib/gcc/arm-apple-darwin9/4.2.1/include/ -isystem /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/include -isystem /Developer/Platforms/iPhoneOS.platform/Developer/usr/include -isystem /opt/iphone-3.0/include -isystem /usr/local/iphone-3.0/include -arch armv6 --sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk -o gpg-error gpg_error-strsource-sym.o gpg_error-strerror-sym.o gpg_error-gpg-error.o  -L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/lib -L/Developer/Platforms/iPhoneOS.platform/Developer/usr/lib -L/opt/iphone-3.0/lib -L/usr/local/iphone-3.0/lib ./.libs/libgpg-error.a
Undefined symbols:
  "_fwrite$UNIX2003", referenced from:
      _main in gpg_error-gpg-error.o
  "_strerror$UNIX2003", referenced from:
      _gpg_strerror in libgpg-error.a(libgpg_error_la-strerror.o)
ld: symbol(s) not found
collect2: ld returned 1 exit status
make[3]: *** [gpg-error] Error 1
make[2]: *** [all] Error 2
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

أي أفكار حول كيفية الحصول على هذا العمل ؟ إصدارات البرامج التي أنا أبحث هي:

  • libgpg-الخطأ:1.7
  • libgcrypt:1.4.4
  • libtasn1:2.2
  • gnutls:2.8.4

الرجاء المساعدة.شكرا لك.

التحديث

حسب ردود الفعل الأولية ، كل SDK لديه نسخة من "libSystem.dylib" في "$SDKROOT/usr/lib".لا يوجد نسخة من libSystem في "$DEVROOT/usr/lib" ، حيث:

  • $DEVROOT = "/المطور/منصات/iPhoneOS.منصة/المطور"
  • $SDKROOT = "$DEVROOT/Sdk/iPhoneOS$VER.sdk"

إن "libSystem" مكتبات تحتوي على العادي ، غير مزخرف الإصدارات من كل رمز ، ولكن لا تحتوي على "$UNIX2003" أنواع من الرموز.وأظن أن GPG-خطأ في تحديد "_POSIX_C_SOURCE", "_UNIX" ، أو آخر UNIX اختبار ميزة الماكرو ، المارقة رأس إلحاق "$UNIX2003" إلى المهام عندما تكون هذه الميزة اختبار وحدات الماكرو موجودة يتم تضمين.إزالة "$DEVROOT/usr/تشمل" من قائمة تشمل الدلائل ليس له أي تأثير فيما يتعلق إزالة رسالة الخطأ هذه.

كملاذ أخير ، أرى أن "ld" يقبل "-alias_list" الخيار الذي يسمح بتحديد الملف مع إدخالات مثل "_fwrite _fwrite$UNIX2003" قسرا حل هذه رموز غير إلى غير مزخرف المتغيرات.إن أمكن أود أن تجنب هذا الخيار لأنه يبدو hackish ويحتمل أن تكون خطرة.

هل كانت مفيدة؟

المحلول

عادة لم الرمز$UNIX2003 يعني أنك ربط ضد كبار السن SDK من القائمة كائن الملفات بنيت ضد.

غريب يبحث تشمل مسار لي ، يرجى ملاحظة أن أنا فقط مألوفا مع ماك التطوير وليس مع اي فون التطوير, هو المسار

/Developer/Platforms/iPhoneOS.platform/Developer/usr/include

والتي ليست في الواقع في SDK مجلد.هل من الممكن أن كنت قد التقطت المارقة الرموز ، إذا كانوا من هناك ؟ يبدو من غير المحتمل لأنه يحدث في وقت لاحق في سطر الأوامر من SDK تشمل مسارات.

ربما بدلا من الرموز المتوقع إصدارات _fwrite و _strerror وهكذا gpg_error-gpg-error.o و libgpg-error.a بخير و انها حقا ربط القضية مرة أخرى على الرغم من أن من غير المرجح لديك

/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/lib

كما a-L الخيار.أفترض هناك libSystem dylib في مكان ما ؟

أعتقد أن أول شيء يجب القيام به هو التأكد مما إذا كانت UNIX2003 إصدار الرمز هو ما كنت تتوقع أو لا.تخميني هو ، ولكن كما قلت أنا يمكن أن تكون خاطئة تماما.:)

ثانيا هل يمكن أن تحاول الحصول على إخراج مطول من ld لنرى أين هو إيجاد الرموز.أنا متأكد من أن هناك متغير بيئة يمكنك تعيين لجعل هذا يحدث ولكن لا أستطيع أن أرى أي المدرجة في رجل الصفحة ld. (التحديث:اثنين env المتغيرات LD_TRACE_ARCHIVES و LD_TRACE_DYLIBS ولكن ربما أنها تعطي نفس تي؟).

تحرير:

حسنا, لقد كان خاطئا تماما عن UNIX2003 رموز يجري تلك التي كانت مطلوبة.لول.

عندما بنيت libgpg-خطأ أعتقد أنه سيتم إنشاء ملف

src/.deps/gpg_error-gpg-خطأ.بو

الذي يحتوي على رأس تبعيات (على الأقل هذا نظام لينكس).هذا قد يعطي فكرة حيث أنها التقطت الخطأ رأس عند بناء gpg_error-gpg-خطأ.o.

راجع للشغل, يبدو كما لو كان libgpg-خطأ تكوين النصي يقبل على حد سواء -isysroot و -archخيارات.يمكنك استخدام تلك بدلا من النسخة الخاصة بك من تكوين النص ؟

Edit2:

حسنا, دعونا أخرى :) وهنا بعض الأشياء في محاولة ، بدءا من مصدر نظيف المجلد:

  • استخدام isysroot بدلا من --sysroot
  • استخدام isysroot وكذلك --sysroot
  • جعل مؤقتا العادي الخاص بك نظام رؤوس متوفرة من قبل ، على سبيل المثال ، إعادة تسمية المجلد.نأمل أن نبني سوف تقع على الفشل في العثور على رأس وأنها سوف اقول لكم بالضبط أين.

نصائح أخرى

في محاولة preprocess gpg_error-gpg-خطأ.c -E ثم البحث عن المفقودين الرموز.يجب أن تجد من حيث هناك إينكلود (شيء من هذا القبيل asm ("_" "جميل" "@UNIX2003").ثم تعديل هذا رأس (unistd.ح على سبيل المثال لإضافة #تحذير "هنا").الآن, ترجمة, و يجب عليك أن تجد تشمل المكدس.

دولار عام 2003 لاحقة يتم إنشاؤها بواسطة برنامج التحويل البرمجي في ظل بعض الظروف التي يمكنك أن تجد توثيقا كاملا في دليل دخول compat

man compat

تصارعت مع هذا لبعض الوقت قبل أخيرا تحديد ذلك عن طريق وضع

-mmacosx-version-min=10.3

أي إصدار قبل 10.4 سيتم القيام بهذه المهمة.وأظن أن تعطى تروبادور الجواب قد يكون من الأفضل البحث عن خطأ ربط المكتبات باستخدام-t خيار ld

ويساعد هذا الأمل.

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