如何在linux中编译二进制文件,可以在不事先运行的情况下运行./

时间:2016-02-21 05:33:43

标签: c linux gcc

当我使用gcc编译程序时,它应该使用prepending ./运行。 gcc -Wall -o hello-world hello-world.c 将生成二进制hello-world,我必须以./hello-world运行它但是我想通过输入hellow-world如何编译它来运行它作为任何其他系统bimary?

3 个答案:

答案 0 :(得分:2)

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

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

然而,这通常是不赞成的,因为它可能会产生一些意想不到的副作用。有些人甚至认为这是一种安全风险 例如,请参阅https://superuser.com/questions/156582/why-is-not-in-the-path-by-default

答案 1 :(得分:1)

您必须将包含可执行文件的目录添加到$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

答案 2 :(得分:1)

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