الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

طريقة تحويل Lib إلى A

بدأه asm-soft في 27 يوليو 2008 · 6 رد · 1,283 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاتة

أحياناً كثيرة تريد أن تتعامل مع مكتبة و لم تستطيع بسبب أن ملف الربط الخاص بها هو lib وليس ملفات a التى تخص GCC

و لإنشاء ملف a نتبع الأسلوب الأتى و سوف أستخدم مكتبة MySQL فى المثال

1- نقوم بإنتاج ملف def بواسطة البرنامج reimp هكذا

reimp -d libmysql.lib

حيث -d تقوم بتوليد ملف def

2- سينتج ملف def بجوار المكتبة فنقوم بإنشاء ملف a بواسطة البرنامج dlltool هكذا

dlltool -k -d libmysql.def -l libmysql.a

حيث -k تقوم بحذف @<n> من الأسماء المستخرجة و -d تشير إلى ملف def و -l تشير إلى ملف a الذى سيتم توليده

شوفتو الحكاية بسيطة خالص إزاى :D

forum-signature-01.gif
#2

شكرا أخويا

لكن هل هذه هي الطريقة العملية لعمل ذلك

و هل ان البرنامج الناتج سيعمل مع dll ملفات lib او dll ملفات a :wacko:

logo.gif
#3

وعليكم السلام ورحمة الله وبركاته ,

لم أتوقع أنها بهذه السهولة ..

ولكن هناك أمر أغرب ..

المترجم GCC .. يستطيع ان يتعرف على ملفات lib أيضا بدون حتى تحويل .. وهذا أمر غريب بصراحة ..

يقود الى السؤال التالي .. ماهو الفرق بين .a و .lib ..

الامر الاخر .. ملفات lib أو .a .. هي نوعين :

- قد تكون عبارة عن مكتبة static .. بالتالي تجد حجمها كبير .. مثلا 1 ميقا .. حسب حجم كمية الكود .( يتم انتاج هذا النوع اذا كان الربط ستاتيكي .)

- وقد يتم انتاجها مع ملفات dll أو ما تسمى في لينكس بال shared object ..so.. وعندها لن تحتوي الا على معلومات بسيطة ..التي تساعد على الربط مع ملف dll ..

(يتم انتاج هذا النوع اذا كان الربط ديناميكي ) .

هل طريقتك تقوم بتحويل كلا النوعين .. عفوا .. من الافضل ان اجرب بنفسي .. ولكني كسول :D

تم تعديل هذه المشاركة بواسطة الشمري في 11 أغسطس 2008 في 17:57

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#4
Farhat كتب:
لكن هل هذه هي الطريقة العملية لعمل ذلك

و هل ان البرنامج الناتج سيعمل مع dll ملفات lib او dll ملفات a :wacko:

1- لا أستطيع أن أعطيك اجابة شافية بأن هذة الطريقة هى الطريقة العملية أم لا و لكنها أخر ما عرفتة لتحويل المكتبة و البرامج المستخدمة ستجدها معدة مع GCC إذا كنت تستخدم CodeBlocks

2- البرنامج سيتعامل مع Dll واحده فالتحويل يقوم بتحول lib إلى a وليس له دخل بالـ DLL

الشمري كتب:
يقود الى السؤال التالي .. ماهو الفرق بين .a و .lib ..

الامر الاخر .. ملفات lib أو .a .. هي نوعين :

- قد تكون عبارة عن مكتبة static .. بالتالي تجد حجمها كبير .. مثلا 1 ميقا .. حسب حجم كمية الكود .( يتم انتاج هذا النوع اذا كان الربط ستاتيكي .)

- وقد يتم انتاجها مع ملفات dll أو ما تسمى في لينكس بال shared object ..so.. وعندها لن تحتوي الا على معلومات بسيطة ..التي تساعد على الربط مع ملف dll ..

(يتم انتاج هذا النوع اذا كان الربط ديناميكي ) .

هل طريقتك تقوم بتحويل كلا النوعين .. عفوا .. من الافضل ان اجرب بنفسي .. ولكني كسول :D

1- لا أعرف بالتحديد ما هو الفرق بين نوعين الملفات .

2- يتم هذا التحويل مع المكتبات الديناميكية فقط لأن ملف Lib فى هذة الحالة يحتوى على العناوين فقط .

بخصوص ان مترجم GCC يستطيع التعامل مع النوعين فهذا أمر غريب و ليس غريب لأن لا يوجد مانع للتعامل مع النوعين :) و لكن سيزول الإندهاش لو عرفنا ما الفرق بين النوعين (مفيش واحد ابن حلال يقولنا على الفرق :D )

تم تعديل هذه المشاركة بواسطة asm-soft في 12 أغسطس 2008 في 08:42

forum-signature-01.gif
#5
asm-soft كتب:
2- البرنامج سيتعامل مع Dll واحده فالتحويل يقوم بتحول lib إلى a وليس له دخل بالـ DLL

عزيزي هناك فرق و على سبيل المثال

في محرك برمجة الألعاب الشهير irrlicht

DLL ملف a مختلف على DLL ملف lib

و البرنامج الناتج بملف a لا يستعمل DLL ملف lib

و العكس كذلك صحيح

:wacko:

logo.gif
#6

موضوع جميل و على المستوى الشخصى كل المكتبات التى استخدمها مفتوحة المصدر

ويمكن اعادة بنائها حسب المترجم المستخدم مباشرة بدون اجراء عمليات تحويل.

مع تحياتى للجميع

والله الموفق

#7

@Farhat

معلش كان هناك مجموعة أعطال فى النت و التليفون و كنت منعزل عن العالم الخاجى و الأن رأيت ردك

التحويل ده بيتم مع المكتبات الديناميكية فقط أى يمكن تحويل المكتبة Lib الخاصة بربط DLL و لا تقوم بتحويل المكتبة الأستاتيكية Lib التى لا تعمل على الربط بين البرنامج و DLL لأن الملف Lib فى هذة الحالة هو المكتبة كاملة و ليس لها دخل بملف DLL

أما لو كان هناك DLL و ملف الربط الخاص به هو ملف a فأنت لست فى حاجة للتحويل :)

تم تعديل هذه المشاركة بواسطة asm-soft في 20 أغسطس 2008 في 22:19

forum-signature-01.gif

مواضيع مشابهة