0

如何在我的代码中捕获符号查找错误,因此目前我的程序崩溃了?

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(...) {
  }
}
4

1 回答 1

6

dlopenC函数。它不会抛出任何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

于 2012-09-07T09:03:47.737 回答