كيفية ربط باستخدام دول مجلس التعاون الخليجي دون -l ولا hardcoding مسار لمكتبة التي لا تتبع اصطلاح التسمية libNAME.so؟
-
03-07-2019 - |
سؤال
ولدي مكتبة مشتركة أود أن تصل للتنفيذ ضد استخدام دول مجلس التعاون الخليجي. المكتبة المشتركة له اسم غير قياسي لا من النموذج libNAME.so، لذلك لا يمكن استخدام الخيار -l المعتاد. (ويحدث أيضا أن تكون امتدادا بيثون، وهكذا لا يوجد لديه البادئة "ليب".)
وأنا قادرة على تمرير المسار إلى ملف مكتبة مباشرة إلى سطر الأوامر الارتباط، ولكن هذا يتسبب في مسار مكتبة لتكون ضمنية إلى القابل للتنفيذ.
وعلى سبيل المثال:
g++ -o build/bin/myapp build/bin/_mylib.so
هل هناك طريقة لربط هذه المكتبة دون التسبب في الطريق الذي ينبغي أن ضمنية إلى الملف القابل للتنفيذ؟
المحلول
وهناك ":" البادئة التي تسمح لك لإعطاء أسماء مختلفة لالمكتبات. إذا كنت تستخدم
g++ -o build/bin/myapp -l:_mylib.so other_source_files
ويجب بحث المسار الخاص بك ل_mylib.so.
نصائح أخرى
إذا يمكنك نسخ المكتبة المشتركة إلى دليل العمل عندما يتم استدعاء ز ++ ثم هذا يجب أن تعمل:
g++ -o build/bin/myapp _mylib.so other_source_files
إذا كنت على يونكس أو لينكس اعتقد انه يمكن إنشاء ارتباط رمزي إلى المكتبة في الدليل الذي تريد المكتبة.
على سبيل المثال:
ln -s build/bin/_mylib.so build/bin/lib_mylib.so
هل يمكن بعد ذلك استخدام -l_mylib
http://en.wikipedia.org/wiki/Symbolic_link