我想知道是否有一个glibc函数可以使用gcc/g++来检索当前的可执行文件。
其目的是为addr2line
提供-e参数,如this answer所示
最佳答案
在标准c和glibc中,有argv[0]:
int main (int argc, char *argv[])
数组的第一个元素是程序名。
然而,仅凭它自己并不一定足以确定可执行文件的确切位置。这个参数实际上是由运行程序的程序设置的—无论是shell还是窗口管理器—它们都没有太大帮助。如果您的程序在路径中,并且您只需使用
你的课程
在bash shell中,“your_program”是argv[0]中的全部内容。
对于完整的可执行路径,linux具有
argv
filesystem。在/proc
下,每个运行的进程都有自己的“目录”,由其进程id命名。运行的进程也可以在/proc
下看到自己的子树。每个进程获取的文件之一是/proc/self
,它是指向进程正在运行的实际可执行文件的符号链接。所以您可以得到实际的完整可执行路径,如下所示:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main(void) {
char exe[1024];
int ret;
ret = readlink("/proc/self/exe",exe,sizeof(exe)-1);
if(ret ==-1) {
fprintf(stderr,"ERRORRRRR\n");
exit(1);
}
exe[ret] = 0;
printf("I am %s\n",exe);
}
您还可以将
/proc/[pid]/exe
直接传递到/proc/[pid]/exe
。关于c - glibc函数检索当前的可执行文件名称?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10365086/