有没有办法在共享库被加载时被“通知”?
换句话说,假设我在共享库上使用 dlopen ,是否在共享库(例如main)上自动调用了一个函数(如果存在)?
库应该使用gcc attribute ((constructor))和__attribute __((destructor))函数属性导出初始化和清理例程。有关这些信息,请参见gcc信息页面。构造函数例程在dlopen返回之前执行(如果在加载时加载了库,则在main()启动之前)。析构函数例程在dlclose返回之前执行(如果在加载时加载了库,则在exit()或main()完成之后)执行。这些函数的C原型是:
void __attribute__ ((constructor)) my_init(void); void __attribute__ ((destructor)) my_fini(void);
取自http://tldp.org/HOWTO/Program-Library- HOWTO/index.html
就是说,您只需将__attribute__((constructor))附加到加载共享库时要调用的函数即可。上面的文档还指出,较旧的_ini和_fini函数被认为已过时。