#include <dlfcn.h> //定義該函數為了dladdr獲取符號信息 void fun1() { } Dl_info info; //dladdr獲取某個地址的符號信息 int rc = dladdr((void*)fun1, &info); //(void *)轉化是關鍵步驟
char dir[100];
strcpy(dir, info.dli_fname); //info.dli_fname存的是包含文件名的路徑.
dladdr的原型:
int dladdr(void *address, Dl_info *dlip); //這個dladdr這個函數只對動態鏈接程序起作用。
dlip 是指向Dl_info 結構的指針。該結構必須由用戶分配。如果指定的address 在其中一個加載模塊的范圍內,則
結構成員由dladdr() 設置。Dl_info 結構包含下列成員:
struct {
const char *dli_fname; //這個路徑是包含這個共享對象地址的文件路徑,以我的理解就是調用這個函數的文件
void *dli_fbase;
const char *dli_sname;
void *dli_saddr;
size_t dli_size; /* ELF only */
int dli_bind; /* ELF only */
int dli_type;
};
參考鏈接:
1.動態鏈接庫加載拾遺&dladdr函數使用:https://www.jianshu.com/p/1ef4460b63db
2.https://blog.csdn.net/dragon101788/article/details/18673323