首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"program_invocation_name“未在MacOS下编译

"program_invocation_name“未在MacOS下编译
EN

Stack Overflow用户
提问于 2020-05-26 03:51:02
回答 2查看 284关注 0票数 0

尝试使用program_invocation_name打印程序名

代码语言:javascript
复制
#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下编译:

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

发布于 2020-05-26 03:56:53

program_invocation_name不是任何标准的一部分;它是由glibc和其他几个系统提供的扩展;MacOS不是其中之一。用它就像你在这里做的那样,是毫无理由的,不可携带的,毫无意义的。只需使用argv[0]

program_invocation_name的惟一要点是对于不是main的函数,并且main没有任何将argv[0]传递给它们的契约,或者以其他方式使其可用以获得argv[0]的(初始值)。

票数 0
EN

Stack Overflow用户

发布于 2020-05-26 04:02:08

来自Glibc函数代用品下的12.14 Glibc扩展到errno.h

12.14.1 program_invocation_name Gnulib没有解决的可移植性问题: 在一些平台上缺少此变量: 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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62014367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档