#include <cstdlib>
#include <type_traits>
// This declaration lives in some library header
void * LIB_fun_1(int, char *);
void test()
{
auto libhandle = dlopen(...);
if (!libhandle) abort();
// here, pLIB_fun_1 will have a proper type for calling LIB_fun_1,
// using decltype<&LIB_fun_1>
auto pLIB_fun_1 =
reinterpret_cast<decltype(&LIB_fun_1)>(dlsym(libhandle, "LIB_fun_1"));
// pLIB_fun_1 can be used here
dlclose(libhandle);
}
1条答案
按热度按时间afdcj2ne1#
这可能吗?
便携式?不需要。延迟运行时链接到共享对象是Windows平台的一个特性,所以你可以在那里实现它,而不需要对应用程序的C/C代码做太多修改。
否则,唯一的半可移植方法是强制运行时解析库符号,因此您首先使用
dlopen
或LoadLibrary
打开所需的库,然后在其中查找符号,并将它们转换为适当类型的数据或函数指针。在C中,为了让你的生活更轻松,指针可以从库头中假设类型,所以打字错误的可能性较小:
字符串