MACOS/LINUX/WINDOWS C++ 获取当前可执行程序的完整路径

依赖本人写的多平台编译器宏判断:

C/C++ MACOS、Windows、Linux、HarmonyOS 平台宏判断-CSDN博客

MACOS头文件依赖:

#if defined(_MACOS)

#include <libproc.h>

#endif

#include <mach-o/dyld.h>

只需要链接 libSystem.dylib 就行了,不需要在编译器上面声明链接它,编译器会隐式自动链接。

源代码:

cpp 复制代码
    std::string GetFullExecutionFilePath() noexcept {
#if defined(_WIN32)
        char exe[8096]; /* MAX_PATH */
        GetModuleFileNameA(NULL, exe, sizeof(exe));
        return exe;
#elif defined(_MACOS)
        char path[PATH_MAX];
        uint32_t size = sizeof(path);
        if (_NSGetExecutablePath(path, &size) == 0) {
            return path;
        }

#if defined(PROC_PIDPATHINFO_MAXSIZE)
        char pathbuf[PROC_PIDPATHINFO_MAXSIZE];
        proc_pidpath(getpid(), pathbuf, sizeof(pathbuf));
        return pathbuf;
#else
        return "";
#endif
#else
        char sz[PATH_MAX + 1];
        int dw = readlink("/proc/self/exe", sz, PATH_MAX);
        sz[dw] = '\x0';
        return dw < 1 ? "" : sz;
#endif
    }
相关推荐
Jinkxs25 分钟前
LoadBalancer- 主流负载均衡工具盘点:Nginx / Haproxy / Keepalived 基础介绍
运维·nginx·负载均衡
秋930 分钟前
MySQL 8.0.46 全平台安装与配置详解(Windows/Linux/macOS)
linux·windows·mysql
善恶怪客1 小时前
LocalSend基本使用
windows
小康小小涵1 小时前
基于ESP32S3实现无人机RID模块底层源码编译
linux·开发语言·python
CQU_JIAKE1 小时前
4.28~4.30【Q】
linux·运维·服务器
左手厨刀右手茼蒿1 小时前
Linux 内核中的设备驱动开发:从字符设备到网络设备
linux·嵌入式·系统内核
先知后行。1 小时前
Linux 设备模型和platform平台
linux·运维·服务器
lzh200409191 小时前
深入理解进程:从PCB内核结构到写时拷贝的底层实战
linux·c++
日取其半万世不竭2 小时前
Minecraft Java版社区服务器搭建教程(Linux,适合新手)
java·linux·服务器
时空自由民.2 小时前
蓝牙协议之GAP协议
linux·服务器·网络