التحقق ، في وقت التشغيل ، لوجود وظيفة في البرنامج
-
21-08-2019 - |
سؤال
أنا أكتب برنامجًا من المفترض أن يمتد بواسطة بعض تعريفات الوظائف. تتمثل إحدى طريقة تجميع البرنامج في إنشاء رمز واحد قابل للتنفيذ واحد بالرمز الرئيسي. المشكلة هي: إحدى الوظائف التي يجب تحديدها اختياري وأحتاج إلى اختبار ذلك.
على Linux ، إليك ما أفعله:
قم بتجميع البرنامج مع خيار "-rdynamic" إلى خيار G ++ أو "-Export-Dynamic" إلى LD. ثم ، استخدم ldsym مثل هذا:
fct_type myfct = (fct_type)dlsym(RTLD_DEFAULT, "fct");
إذا كانت الوظيفة "FCT" موجودة في البرنامج ، فسيؤدي ذلك إلى إرجاع عنوانها ، وإلا فإنها تُرجع NULL.
الآن ، على Windows ، من المفترض أن أكون قادرًا على القيام بذلك:
dll_handle = GetModuleHandle(0);
fct_type myfct = (fct_type)GetProcAddress(dll_handle, "fct");
ولكن لا يوجد خيار "-rdynamic" أو "-بتصدير الديناميك" إلى G ++ على Mingw32! لذلك هذا لا يعمل. هل يعرف أي شخص ماذا يفعل على Windows مع Mingw32؟
المحلول
حسنًا ، في النهاية ، سأجيب على سؤالي الخاص ...
عليك ربط العلم -Wl,--export-all-symbols
ويعمل ...