سؤال

أنا أعمل مع Android NDK، وبما أنه لا يدعم حاليًا STL، كنت أتساءل عما إذا كان هناك أي أشخاص رائعين حققوا نجاحًا في هذا، أو يعرفون أيهما أكثر ملاءمة لمنصة Android:USTL أو STLPort.

يحرر:يبدو وكأنه خيار آخر قد يكون كريستال اكس.نت.

من موقعهم على الانترنت:

... توزيع مخصص للأندرويد NDK r3 التي قمت بإعادة بنائها منها مصادر رسمية.دعم C ++ الاستثناءات ، RTTI ومعيار C ++ وأضاف المكتبة.

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

المحلول

وSTLport دعم منذ Android2.3 والآن !!!

نصائح أخرى

منافذ STL رسمية متوفر في Android NDK من الإصدار r5 على.ويمكن استخدامه إما كمكتبة ثابتة أو مشتركة.تتوفر التطبيقات التالية التي تم إنشاؤها مسبقًا باستخدام NDK:

  • STLport, ، بناءً على الإصدار 5.2.0:
    • ثابتة stlport_static :استخدمه إذا كان لديك مكتبة ديناميكية واحدة فقط في مشروعك.
    • متحرك stlport_shared :لاستخدامها إذا كان لديك أكثر من مكتبة ديناميكية في مشروعك.
  • جنو ليبست دي سي ++ system (المكتبة الثابتة)

الطريقة الموصى بها وسهلة الاستخدام في وقت الإنشاء، يتم ذلك عن طريق تعريف APP_STL في Application.mk، كما يلي:

APP_STL := stlport_static

وإذا كنت ترغب في إعادة بنائه (هذا هو لا ضروري)، حدد STLPORT_FORCE_REBUILD في Application.mk الخاص بك:

STLPORT_FORCE_REBUILD := true

يتوفر أيضًا إطار اختبار الوحدة لـ STLport.

القيود الحالية لSTLport :

  • استثناءات C++ غير مدعومة
  • RTTI غير مدعوم
  • "الأخطاء المحتملة" في دعم wchar_t واللغات

روابط متنوعة :

الوثائق متاحة في حزم NDK في المواقع التالية (قد يكون هناك المزيد):

  • docsCPLUSPLUS-SUPPORT.html
  • المصادر/cxx-stl/stlport
  • المصادر/cxx-stl/gnu-libstdc++

تنزيل NDK + مستندات هنا ;أخطاء الملف هنا


يوجد أدناه مقتطف من docs/CPLUSPLUS-SUPPORT.html (من مستندات NDK، r5)

ثالثا.تحديد تنفيذ مكتبة C++ القياسية:

بشكل افتراضي ، الرؤوس والمكتبات لنظام وقت تشغيل C ++ الأدنى يتم استخدام المكتبة (/ system / lib / libstdc ++ .so) عند إنشاء مصادر C ++.

ومع ذلك ، يمكنك تحديد تطبيق مختلف عن طريق تعيين المتغير APP_STL إلى شيء آخر في Application.mk، على سبيل المثال:

APP_STL := stlport_static

لتحديد تطبيق STLport الثابت المقدم مع NDK هذا.قيم قيمة APP_STL هي التالية:

النظام -> استخدم الحد الأدنى من مكتبة وقت التشغيل C++ الافتراضية.stlport_static -> استخدم STLport المدمج كمكتبة ثابتة.stlport_shared -> استخدم STLport المدمج كمكتبة مشتركة.

تحذير:تحذير مهم

 AT THE MOMENT, OUR STLPORT IMPLEMENTATION DOES NOT SUPPORT EXCEPTIONS
 AND RTTI. PLEASE BE SURE TO NOT USE -fexceptions OR -frtti IN ALL
 MODULES THAT USE IT.

تحذير:نهاية التحذير المهم

يفضل استخدام "stlport_shared" إذا كان لديك العديد من المكتبات المشتركة في المشروع الذي يستخدم C ++ STL ، لأنه يتجنب ازدواجية الوظائف والأهم من ذلك من المتغيرات العالمية (على سبيل المثالالأمراض المنقولة جنسيا :: cout) في كل واحد من لهم ، والتي يمكن أن يكون لها نتائج مفاجئة.

من ناحية أخرى ، سيتعين عليك تحميله بشكل صريح عند بدء تشغيل التطبيق ، كما في المثال التالي:

 static {
     System.loadLibrary("stlport_shared");
     System.loadLibrary("foo");
     System.loadLibrary("bar");
 }

حيث يعتمد كل من "libfoo.so" و"libbar.so" على "libstlport_shared.so".

لاحظ أن اسم المكتبة المشتركة إذا كان "libstlport_shared.so" لتجنب تعارضات التسمية مع بعض صور نظام Android التي تتضمن ملف libstlport.so على مستوى النظام (والذي يحدث أنه غير مستقر و ABI و لا يمكن استخدامها من رمز الجهاز الذي تم إنشاؤه بواسطة NDK).

يفضل استخدام "stlport_static" إذا كان لديك مكتبة مشتركة واحدة فقط في مشروع:فقط وظائف ومتغيرات STL التي تحتاجها بالفعل ستكون مرتبط برمز جهازك ، مما يقلل من حجم الكود الخاص به ، ولن تحتاج إليه لتحميل stlport_shared الديناميكي عند بدء التشغيل.

رابعا.المشكلات الخاصة بـ STLport:

يوفر NDK هذا مكتبات ثابتة ومشتركة تم إنشاؤها مسبقا ل STLport ، ولكن يمكنك فرض إعادة بنائه من المصادر من خلال تحديد ما يلي في بيئتك أو Application.mk الخاص بك قبل البناء:

STLPORT_FORCE_REBUILD := true

تم ترخيص STLport بموجب ترخيص مفتوح المصدر على طراز BSD.رأى المصادر / cxx-stl / stlport / README لمزيد من التفاصيل حول المكتبة.

الخامس.خطط مستقبلية:

  • اجعل STLport متوافقًا مع استثناءات C++ وRTTI
  • دعم GNU libstdc++ الكامل
  • دعم USTL؟

ولكن لاحظ أن uSTL ينحرف عن معيار قليلا جدا. على سبيل المثال، فإنه يفترض UTF-8 ترميز الأمراض المنقولة جنسيا :: سلسلة. لا تزال تبدو مثيرة للاهتمام، على الرغم من ...

وجئت مؤخرا عبر بعض البرامج النصية المساعد وميناء STLport لالروبوت ، من قبل جون ريبلي.

وهناك أيضا ذات الصلة بلوق وظيفة مع تعليمات عن كيفية إعداده .

وأفترض قد يجعل من الاسهل للذهاب مع STLport.

وهذه هي الطريقة I تكوين STLPort للعمل مع Froyo الروبوت.

// The code
// The set of definitions and includes for STLPort
// They used defined() instead of #ifdef.
#define _STLP_HAS_INCLUDE_NEXT  1
#define _STLP_USE_MALLOC   1
#define _STLP_USE_NO_IOSTREAMS  1
#include <stl/config/_android.h>
#include <map>
#include <string>

// Android.mk
# For Android STL support
LOCAL_C_INCLUDES += external/stlport/stlport
LOCAL_SHARED_LIBRARIES += libstlport

وأندرو

ملاحظة أن ذكر بوابة مستودع في الارتباط من الجواب ستيبان رايكو لم يعد موجودا. مصادر بديلة هي على anddev و، عبر بوابة، في بوابة: // stlport .git.sourceforge.net / gitroot / stlport / stlport. لقد وجدت هذه الأخيرة في <لأ href = "http://www.codexperiments.com/android/2010/05/android-introduction-part-2-setting-up-your-environment/" يختلط = "نوفولو noreferrer" > تعد مناقشة استخدام كلا stlport ودفعة تحت الروبوت.

ومنذ الإجابة على هذا السؤال أولا، لقد حصلت على STLPort anddev للعمل مع مكتبتي التي تدعو أيضا دفعة، بما في ذلك shared_ptr مشكلة. للحصول على تفاصيل الحل بلدي يرى <وأ href = "https://stackoverflow.com/questions/4347151/how-to-use-the-boost-library-including-shared-ptr-with-the-android-ndk-and -stlp "> هذا السؤال .

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