السلام عليكم
أنا أعمل مبرمجاً حراً freelancer، و قد طلب أحد العملاء مني التعديل في برنامج open-sankore مفتوح المصدر (
بحيث أضيف له إمكانيات جديدة ليست فيه، و أجعله أكثر تناسباً مع احتياجات شركته، و قد وجدتُ الأمر ليس بشديد الصعوبة بحمد الله تعالي. و رغم أنني أعمل بالـjava و لا أحب العمل بالـ++C، و لم أستخدم مكتبة الـQt من قبل في الفترة التي كنتُ أعمل فيها بالـ++C، إلا أنني بذلت جهدي لتحصيل اللازم بسرعة و بدأت أولي الخطوات بفضل الله تعالي.
المشكلة أن مطوري open-sankore جعلوه يعتمد علي كثير من المكتبات الخارجية (مثل OpenSSL و غيرها) لكي يستطيع القيام بوظائفه، و هذا أدي إلي أن التعديل في أكواده أصبح عذاباً أليماً؛ فلكي تقوم بعمل build مبدئي له عليك أن تقوم بعمل build لكل الاعتماديات:
و علي رأس تلك الاعتماديات نسخة معدلة من مكتبة الـQt !، نعم: لقد عدلوا مكتبة الـQt لتتماشي مع أكواد برنامجهم (و هو أمر عادي في عالم البرمجيات مفتوحة المصدر)، و لكن هذا جعل التعامل مع open-sankore كلعب كرة القدم في حقل ألغام؛ فقد واجهتُ الكثير من المشاكل مع الأدوات المختلفة مثل nmake الخاص بالـvisual studio و غيره لكي أصل لمرحلة التكويد فقط !
المهم هنا أنني تجاوزتُ كل الصعوبات و العلل bugs التي اصطدمتُ بها أثناء استخدامي لأدوات مثل الـnmake، و لكن المشكلة الأخيرة التي لم أستطع تجاوزها هي الخطأ التالي من الـlinker أثناء عمل build لأكواد open-sankore نفسه:
QtCore5.lib(QtCore4.dll) : error LNK2005: "public: __thiscall QFlag::QFlag(int)" (??0QFlag@@QAE@H@Z) already defined in quazip.lib(quazipfile.obj)
و قد بحثتُ عن حلول لهذه المشكلة علي الشبكة و لكني لم أجد، فقط عرفت أن المسألة أن الـlinker مرتبك بسبب المزج بين الـstatic linking و الـdynamic linking !، و حينما راسلتُ مطوري البرنامج تجاهلوا هذه النقطة تماماً و كأنني أحدثهم عن "أبو رجل مسلوخة" !
فإذا كان هناك من عنده خبرة في مكتبة الـQt و يمكنه مساعدتي فأرجو أن يفعل مشكوراً :)
التعليقات