gpt4 book ai didi

c++ - 在编写可移植的 c/c++ 程序时,使用外部文件的最佳方式是什么?

转载 作者:太空狗 更新时间:2023-10-29 20:17:31 28 4
gpt4 key购买 nike

我是 c/c++ 领域的新手,我已经在虚拟机上沉迷太久了。

我正在修改我们在整个公司使用的现有 C++ 工具。该工具正在所有主要操作系统(Windows、Mac、Ubuntu、Solaris 等)上使用。我正试图将该工具与另一个编写 Java 的工具连接起来。基本上我只需要从 C++ 工具调用 java -jar。

问题是,我如何知道 jar 在用户计算机上的位置? C++ 可执行文件目前被 checkin Perforce,用户同步然后调用 exe,大概将 exe 留在原地(尽管他们可以将其复制到其他地方)。我当前的解决方案检查 exe 旁边的 jar 文件。

我研究了多种从 C++ 计算 exe 位置的方法,但似乎没有一种是可移植的。在 Windows 上有一个“GetModuleLocation”,在 posix 上你可以查看 procs/process.exe 信息来确定进程的位置。在大多数系统上,您可以查看 argv[0] 以确定 exe 的位置。但由于用户使用 $PATH、符号链接(symbolic link)等调用 exe,因此大多数这些技术都是 100% 有保证的。

那么,关于执行此操作的正确方法是否始终有效?我想如果定义多个解决方案我没有问题,但似乎应该有更优雅的方法来做到这一点。

最佳答案

我认为没有一种可移植的方法可以做到这一点。 C++ 标准本身并没有定义任何关于执行环境的内容。你得到的最好的是 std::system 调用,它可能会因为路径名中的 Unicode 字符而失败。

这里的问题是 C 和 C++ 都用在没有操作系统这样的东西的系统上。没有 $PATH 这样的东西。因此,标准委员会要求一致的实现提供此类功能是荒谬的。

我只想为 POSIX 编写一个实现,一个用于 Mac(如果它与 POSIX 有很大不同......从未使用过它,所以我不确定),一个用于 Windows(在编译时选择哪个预处理器)。每个可能有 3 个函数调用;代码不多,您将确保遵循目标平台的约定。

关于c++ - 在编写可移植的 c/c++ 程序时,使用外部文件的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6509822/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com