【问题标题】:Link a binary to execute from it's orignal directory链接二进制文件以从其原始目录执行
【发布时间】:2019-07-31 18:56:17
【问题描述】:

我有一个用C编写的程序,它的目录结构是这样的:

root/
    program.sh
    textures/
        texture1.png

program.sh 以如下方式导入纹理:load_textures("./textures/texture1.png")(相对路径)。因此,该程序仅在我从root 目录执行program.sh 时才有效。

我想创建一个指向program.sh 的链接,这样,每当我执行该链接时,我就可以从根目录执行program.sh。也就是说,我想从根目录外执行program.sh。

现在,我希望有一个解决方案可以在不更改源代码的情况下执行此操作(如果有办法的话),否则,在当前情况下,您如何建议我在 C 中打开文件/纹理?

有一个类似的问题here,但没有答案。

【问题讨论】:

  • 您是否只是想在从链接执行时更改程序的当前工作目录?
  • 程序正在使用资产的相对路径。因此,如果我更改目录,它将起作用。但我想在执行之后回到我之前所在的目录。
  • 是的。您甚至可以将提供给脚本的命令行参数传递到您的程序中。我的意思是,您可以从一个单独的 C 程序中做到这一点,但这不值得。
  • 只是在谷歌上搜索了一下pushd 和popd,我找到了this。非常感谢,先生。 :D
  • 好的,我会发帖的。

标签: c assets symlink


【解决方案1】:

从 cmets 中可以看出,目标是从不同的目录执行程序,但程序的当前工作目录指向它自己的目录。

虽然这个可以在 C 中完成(在 POSIX 系统中,假设由于 .sh 扩展,通过 chdir 和 execvp 系统调用的组合),它的很多在包装外壳脚本中更容易实现,如下所示:

#!/bin/sh

pushd /path/to/executable
./program.sh $@
popd

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-28
    • 2014-08-13
    • 2020-09-25
    相关资源
    最近更新 更多