Ian*_*ney 5 c dynamic-linking dladdr
的内存语义是什么dladdr()?
#define _GNU_SOURCE
#include <dlfcn.h>
int dladdr(void *addr, Dl_info *info);
typedef struct {
const char *dli_fname; /* Pathname of shared object that contains address */
void *dli_fbase; /* Base address at which shared object is loaded */
const char *dli_sname; /* Name of symbol whose definition overlaps addr */
void *dli_saddr; /* Exact address of symbol named in dli_sname */
} Dl_info;
Run Code Online (Sandbox Code Playgroud)
通过阅读手册页,尚不清楚是否dli_fname:
我想同样的问题也适用于dli_sname,但我怀疑 确实指向一个常量字符串(符号本身)。
用户是否负责删除dli_fname返回的内容dladdr()?
dlclose这些字符串在通过(直接或间接)卸载对象之前一直有效。
表示调用者const char *不能释放该字符串,dladdr因为free需要 a void *,而不是 a const void *。