利用dladdr來獲得so自身的路徑



#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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM