我正在编写一个程序,该程序将通过一些函数定义进行扩展。编译程序的方法之一是创建一个可执行文件,将代码链接到主代码。问题是:要定义的函数之一是可选的,我需要对此进行测试。
将“-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");