如何捕获符号查找错误

时间:2012-09-07 09:00:21

标签: c++

如何在代码中捕获符号查找错误,以便我的程序崩溃?

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

1 个答案:

答案 0 :(得分:5)

dlopenC函数。它不会抛出任何exception

void *dlopen(const char *filename, int flag);

来自man dlopen

  

如果dlopen()因任何原因失败,则返回NULL。

因此,请检查NULL的返回值。

因此,为了检查,该符号存在,您应该使用

void *dlsym(void *handle, const char *symbol);

如果未找到符号,则在指定的库或任何库中        当加载该库时,由dl​​open()自动加载, dlsym()返回NULL 。 (由dlsym()执行的搜索        通过这些库的依赖树首先是广度。)因为符号的值实际上可能是NULL(所以        从dlsym()返回NULL无需指示错误),测试错误的正确方法是调用dlerror()来清除任何旧错误        错误条件,然后调用dlsym(),然后再次调用dlerror(),将其返回值保存到变量中,并检查是否        此保存的值不是NULL