如何在代码中捕获符号查找错误,以便我的程序崩溃?
void main()
{
try {
dlopen("shared.so", RTLD_LAZY);
/**
now running a function in this shared object and
this function calls a undefined reference
and then it crashes but i want to go in the catch block
*/
} catch(...) {
}
}
答案 0 :(得分:5)
dlopen
是C
函数。它不会抛出任何exception
。
void *dlopen(const char *filename, int flag);
来自man dlopen
如果dlopen()因任何原因失败,则返回NULL。
因此,请检查NULL
的返回值。
因此,为了检查,该符号存在,您应该使用
void *dlsym(void *handle, const char *symbol);
如果未找到符号,则在指定的库或任何库中 当加载该库时,由dlopen()自动加载, dlsym()返回NULL 。 (由dlsym()执行的搜索 通过这些库的依赖树首先是广度。)因为符号的值实际上可能是NULL(所以 从dlsym()返回NULL无需指示错误),测试错误的正确方法是调用dlerror()来清除任何旧错误 错误条件,然后调用dlsym(),然后再次调用dlerror(),将其返回值保存到变量中,并检查是否 此保存的值不是NULL 。