Verificação, em tempo de execução, para a existência de uma função em um programa
-
21-08-2019 - |
Pergunta
Estou escrevendo um programa que deve ser estendido por algumas definições de função. Uma das maneiras de compilar o programa é criar um único executável vinculando seu código ao código principal. O problema é: uma das funções a definir é opcional e eu preciso testar isso.
No Linux, aqui está o que estou fazendo:
Compile o programa com a opção "-rdynamic" para G ++ ou "--export-dinâmico" para LD. Em seguida, use LDSYM como este:
fct_type myfct = (fct_type)dlsym(RTLD_DEFAULT, "fct");
Se a função "FCT" existir no programa, isso retornará seu endereço; caso contrário, ele retornará nulo.
Agora, no Windows, eu deveria ser capaz de fazê -lo:
dll_handle = GetModuleHandle(0);
fct_type myfct = (fct_type)GetProcAddress(dll_handle, "fct");
Mas não há opção "-rdynamic" ou "--export-dinâmico" para G ++ no Mingw32! Então isso não funciona. Alguém sabe o que fazer no Windows com Mingw32?
Solução
Ok, então, no final, vou responder minha própria pergunta ...
Você tem que se vincular com a bandeira -Wl,--export-all-symbols
E funciona ...