尝试使用program_invocation_name打印程序名
#include <stdio.h>
#define _GNU_SOURCE
#include <errno.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
extern char *program_invocation_name;
printf("%s \n", program_invocation_name);
exit(EXIT_SUCCESS);
}使用命令gcc filename.c -o文件名,上述代码可以在Linux中工作,但不能在MacOS下编译:
gcc filename.c -o filename
Undefined symbols for architecture x86_64:
"_program_invocation_name", referenced from:
_main in filename-4acad8.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)发布于 2020-05-26 03:56:53
program_invocation_name不是任何标准的一部分;它是由glibc和其他几个系统提供的扩展;MacOS不是其中之一。用它就像你在这里做的那样,是毫无理由的,不可携带的,毫无意义的。只需使用argv[0]。
program_invocation_name的惟一要点是对于不是main的函数,并且main没有任何将argv[0]传递给它们的契约,或者以其他方式使其可用以获得argv[0]的(初始值)。
发布于 2020-05-26 04:02:08
来自Glibc函数代用品下的12.14 Glibc扩展到errno.h
12.14.1
program_invocation_nameGnulib没有解决的可移植性问题: 在一些平台上缺少此变量: Mac 10.5、FreeBSD 6.0、NetBSD 5.0、OpenBSD 3.8、Minix 3.1.8、AIX5.1、HP-UX 11、IRIX 6.5、OSF/1 5.1、Solaris 11.4、Cygwin 1.7.7、mingw、MSVC 14、Interix 3.5、Android9.0。
https://stackoverflow.com/questions/62014367
复制相似问题