【问题标题】:how to compile binaries in linux which can be run without preceding ./如何在 linux 中编译可以在没有前面的 ./ 的情况下运行的二进制文件
【发布时间】:2016-02-21 05:33:43
【问题描述】:

当我使用 gcc 编译程序时,它应该使用前置 ./ 例如运行。 gcc -Wall -o hello-world hello-world.c 将生成二进制 hello-world,我必须将其作为 ./hello-world 运行但我想通过键入 hello-world 如何编译它来像任何其他系统二进制一样运行它?

【问题讨论】:

  • 没有技巧,可执行文件(1)必须在您的$PATH 中或(2)您必须在可执行文件名称前加上./(或绝对路径)。它与“你如何编译它”无关(当然你必须编译它......)。

标签: c linux gcc


【解决方案1】:

作为@BraveNewCurrency 和@songziming 答案的注释,将可执行文件放在搜索路径中。

可以在不添加./ 的情况下执行可执行文件。为此,您必须将当前目录添加到搜索路径。像这样:
export PATH='./:'$PATH

然而,这通常是不受欢迎的,因为它可能会产生一些意想不到的副作用。甚至有人将其视为安全隐患。
例如见https://superuser.com/questions/156582/why-is-not-in-the-path-by-default

【讨论】:

  • 感谢所有回答。添加当前目录的路径解决了我的问题
【解决方案2】:

这与它的编译方式无关。 Linux 只运行你的$PATH 中的东西。因此,您可以将二进制文件复制到 /bin、/usr/bin,有时还可以复制到 /usr/local/bin。您还可以将 ~/bin 添加到您的路径并将二进制文件放在那里。

【讨论】:

    【解决方案3】:

    您必须将包含可执行文件的目录添加到$PATH 才能在没有./ 的情况下运行它。它与编译无关。

    说文件hello-world位于/root/hello,你必须把它添加到PATH比如:export PATH=$PATH:/root/hello,然后你可以用hello-world运行它。

    Linux bash 命令只是可执行文件,您可以使用which 来判断位置:

    $ which ps
    /bin/ps
    

    当您键入没有./ 的命令时,bash 会搜索PATH 环境变量中列出的所有目录以查看它是否包含您键入的可执行文件,并在找到时运行它。在我的机器上,PATH的内容是:

    $ echo $PATH
    /opt/bochs/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/opt/node-v5.1.1-linux-x64/bin:/opt/jdk1.8.0_65/bin:/opt/neovim/bin:/sbin:/opt/node-v5.1.1-linux-x64/bin:/opt/jdk1.8.0_65/bin
    

    【讨论】:

    • 你不应该像root那样做太多事情;它应该在$HOME/bin,可能。
    猜你喜欢
    • 2011-08-09
    • 1970-01-01
    • 2010-09-14
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 2022-12-28
    • 2015-08-09
    相关资源
    最近更新 更多