Проверка во время выполнения на наличие функции в программе - PullRequest
0 голосов
/ 05 февраля 2009

Я пишу программу, которая должна быть расширена некоторыми определениями функций. Одним из способов компиляции программы является создание единого исполняемого файла, связывающего ваш код с основным кодом. Проблема в том, что одна из определяемых функций является необязательной, и мне нужно проверить это.

В 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 Ответ

1 голос
/ 05 февраля 2009

Хорошо, так что в конце я отвечу на свой вопрос ...

Вы должны связать с флагом -Wl,--export-all-symbols, и это работает ...

...