Проверка во время выполнения на наличие функции в программе
Я пишу программу, которая должна быть расширена некоторыми определениями функций. Одним из способов компиляции программы является создание единого исполняемого файла, связывающего ваш код с основным кодом. Проблема в том, что одна из определяемых функций является необязательной, и мне нужно проверить это.
В 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");
Но в MinGW32 нет опции "-rdynamic" или "--export-dynamic" для g++! Так что это не работает. Кто-нибудь знает, что делать на windows с MinGW32?
1 ответ
Итак, в конце я отвечу на свой вопрос...
Вы должны связать с флагом -Wl,--export-all-symbols
и это работает...