سؤال

أنا على وشك القيام برحلتي الأولى إلى عالم JNI (واجهة Java الأصلية) لتقديم إشعارات تغيير نظام الملفات من كود C/C++ الخاص بالنظام الأساسي إلى Java.هذا ما لم يقترح شخص ما مكتبة رائعة للقيام بذلك والتي فاتني.

لكوني جديدًا في JNI، فقد تمكنت من العثور على الكثير من الوثائق على جانب الواجهة وجانب إنشاء المكتبة، لكنني لم أجد الكثير حول بناء المكتبة الأصلية.

لدي إصدار حالي يعتمد على ant لمصدر Java الموجود مسبقًا، لذا أحاول معرفة ما إذا كان ينبغي عليّ استدعاء ant لإنشاء المكتبة أو إذا كان من الأفضل إجراء استدعاء ant بعد الإنشاء المكتبة؟

لا يبدو أي من الخيارين لطيفًا للغاية، ولكن يبدو أن كلاهما أفضل من محاولة إقناع النمل باستدعاء مترجم لتجميع التعليمات البرمجية وإنشاء المكتبة مباشرة.

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

المحلول

أنا لا أحب ذلك بشدة بسبب قواعده الضمنية ومعاملة المسافات البيضاء.أنا شخصياً سأستخدم مهام cpp (http://ant-contrib.sourceforge.net/cpptasks/index.html) للقيام بتجميع C الخاص بي.إنها ليست مرنة مثل التصنيع ولكنها أيضًا أقل تعقيدًا بكثير وهذا يعني أنك لن تضطر إلى تحميل المطورين عبء تعلم الصنع.

نصائح أخرى

كبديل أبسط لـ JNI، جرب JNA: https://jna.dev.java.net/, ، قد يحل لك هذه المشكلة ويكون أبسط (بافتراض أنه يمكنه فعل ما تريد).

سأتخطى JNI تمامًا وأستخدم برنامجًا خارجيًا يكتب إشعارات على الإخراج القياسي.يمكن لـ Java بعد ذلك القراءة ببساطة من تدفق مخرجات البرنامج وإنشاء أي حدث ضروري.JNI يتطلب الكثير من العمل إذا كان كل ما تريده هو إرسال إشعارات بسيطة.

وأيضًا، على Linux، يمكنك ببساطة بدء "inotifywait" (مع بعض المعلمات المناسبة، راجع "man inotifywait").

أنا أعمل على شيء مماثل الآن.انتبه إلى أن استخدام swig من swig.org غالبًا ما يكون أسهل لأنه ينشئ بذرة إلى المكتبة الأصلية لك.

الإجابة المختصرة على سؤالك هي أن ملف النمل يجب أن يقوم بتشغيل ملف الصنع بعد إنشاء مكتبة جافا بالفعل، حيث تعتمد المكتبة الأصلية على رأس swig الذي تم إنشاؤه من ملفات فئة جافا.

إذا كنت على دراية كبيرة بالنملة، ولا ترغب في تعلم نظام جديد، إذن http://ant-contrib.sourceforge.net/cpptasks/index.html, ، والذي تم ربطه أيضًا بملصق آخر، سيتيح لك إنشاء لغة c++ في ant.

يمكنك أيضًا تجربة مهام terp C++ على كوديمش.إنها ليست مجانية ولكنها توفر مستوى عاليًا من التجريد إلى جانب القدرة على اكتشاف/تحديد مترجم C++ والقدرة على التكرار على أكثر من تكوين مترجم/بنية معالج/مترجم للبنيات متعددة المنصات.

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