首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux替代_NSGetExecutablePath?

Linux替代_NSGetExecutablePath?
EN

Stack Overflow用户
提问于 2015-07-09 16:13:05
回答 1查看 1.3K关注 0票数 3

在Ubuntu上是否有可能替代非苹果专用的_NSGetExecutablePath

我试图在Ubuntu上编译以下代码:OSX.cxx

根据我之前提出的问题:fatal error: mach-o/dyld.h: No such file or directory,我决定将第52行注释掉,我想知道是否有一种通用的跨平台(非苹果专用)方法,可以以非苹果特有的方式重写第567行( _NSGetExecutablePath块)的代码块。

阿伦·斯托亚诺夫( also )对Programmatically retrieving the absolute path of an OS X command-line appHow do you determine the full path of the currently running executable in go?的回答给了我一些关于从哪里开始的想法,但我想在开始之前确定我在正确的轨道上。

有没有一种方法可以修改_NSGetExecutablePath,使其与Ubuntu兼容?

目前,我遇到了以下编译器错误:

代码语言:javascript
复制
HeatmapGenerator_Macintosh_OSX.cxx:568:13: error: use of undeclared identifier
      '_NSGetExecutablePath'
        if (_NSGetExecutablePath(path, &size) == 0)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-09 16:26:46

如何以一种跨POSIX系统可移植的方式这样做的基本想法:

代码语言:javascript
复制
#define _XOPEN_SOURCE 500
#include <stdio.h>
#include <limits.h>
#include <stdlib.h>

static char *path;
const char *appPath(void)
{
    return path;
}

static void cleanup()
{
    free(path);
}

int main(int argc, char **argv)
{
    path = realpath(argv[0], 0);
    if (!path)
    {
        perror("realpath");
        return 1;
    }

    atexit(&cleanup);

    printf("App path: %s\n", appPath());
    return 0;
}

您可以为它定义一个自己的模块,只需将它传递给argv[0]并从一个标头导出appPath()函数。

编辑:用访问器方法替换导出变量

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

https://stackoverflow.com/questions/31322873

复制
相关文章

相似问题

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