Automake والمكتبات المشتركة القياسية
-
21-09-2019 - |
سؤال
كيف يمكنني إجبار Automake على إنشاء مكتبة مشتركة قياسية ، بدلاً من واحدة من الجهاز؟ عادة ، سأقوم بإنشاء abc.so
الذي يشار إليه بمسار كامل وتحميله في البرنامج الرئيسي. هل هناك طريقة لإجبار أنا على فعل الشيء نفسه؟ إذا قمت بإدراجها على أنها _library ، فإن Automake تشكو: 'abc.so' is not a standard library name; did you mean 'libabc.a'
فقط للتوضيح: نعم ، أنا فقط بحاجة .so
الدعم - لا إحصائيات. ونعم ، أريد اسم ملف مخصص.
المحلول
لا تعرف Automake كيفية إنشاء مكتبة مشتركة لأنه لا توجد طريقة محمولة للقيام بذلك. إذا كنت تريد مكتبة مشتركة مع Automake ، فيجب عليك استخدام Automake+Libtool. لاحظ أنه يمكنك بسهولة تكوين libtool حتى لا تبني أي مكتبة ثابتة (مع LT_INIT([disable-static])
في الخاص بك configure.ac
) بشكل افتراضي.
نصائح أخرى
libtool هو الطريق للذهاب. إذا كنت تريد اسمًا مخصصًا ، أضف ملف -module
خيار _ldflags ، على سبيل المثال:
plugindir= /some/where
plugin_LTLIBRARIES= abc.la
abc_la_LDFLAGS= -module
مكتبة libtoolyized هي غلاف حول مكتبات قياسية واحدة أو أكثر. يمكنك العثور على هذه المكتبات في ".libs" بعد تشغيل "Make" ، أو في "$ prefix/lib" بعد تشغيل "make install".
على جهاز Linux ، يجب أن تجد في النهاية ملفًا يسمى "Libabc.so".
IIRC ، لا يوجد شيء خاص حول المكتبات التي تم إنشاؤها بمساعدة Libtool ، إلا إذا قمت بالربط مع Libltdl. إذا كنت لا ترغب في استخدام libtool ، فلديك القدرة على الاختيار وعدم الاهتمام بالكثير من قابلية النقل ، فأنت حر في استخدام Automake بدون libtool. أوصي باستخدام قوة libtool بدلاً من ذلك.
في الواقع ، أنا لا أعرف حتى ما هو _library جيد ، لم أجدها في قسم الدليل/الارتباط.