سؤال

أنا أكتب برنامجًا من المفترض أن يمتد بواسطة بعض تعريفات الوظائف. تتمثل إحدى طريقة تجميع البرنامج في إنشاء رمز واحد قابل للتنفيذ واحد بالرمز الرئيسي. المشكلة هي: إحدى الوظائف التي يجب تحديدها اختياري وأحتاج إلى اختبار ذلك.

على 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 ويعمل ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top