【问题标题】:How can I compile and run C/C++ code in a Unix console or Mac terminal?如何在 Unix 控制台/Mac 终端中编译和运行 C/C++?
【发布时间】:2010-09-18 06:47:31
【问题描述】:

如何在 Unix 控制台或 Mac 终端中编译/运行 C 或 C++?

(我知道,忘记它,然后重新学习。是时候写下来了。)

【问题讨论】:

    标签: c++ c macos console terminal


    【解决方案1】:

    假设当前目录不在路径中,语法为./[name of the program]

    例如./a.out

    【讨论】:

    • 对你有好处!点和斜杠之所以存在,是因为在许多系统上,当前目录(Unix 术语中的“.”)不是 shell 搜索的路径的一部分。因此,添加它可以明确您要运行哪个程序。
    【解决方案2】:
    gcc main.cpp -o main.out  
    ./main.out
    

    【讨论】:

    • 作为一个菜鸟,我为在执行时不包括“./”而感到非常悲痛
    • 我使用了“gcc main.cpp -o main.out”,得到了这个错误,Undefined symbols for architecture x86_64: "std::__1::locale::use_facet(std::__1: :locale::id&) const", ... 原来原因是,gcc default-links 是 libc。而使用 g++ 将与 libstdc++ 链接。所以使用“g++ main.cpp -o main.out”可能会更好。
    • 关于Undefined symbols for architecture x86_64 问题,我将命令修改如下:gcc -lstdc++ main.cpp -o main.out,在我的Mac上运行。通过链接:stackoverflow.com/questions/11852568/…
    【解决方案3】:

    添加以下内容以获得最佳警告,您不会后悔的。如果可以,编译 WISE(警告是错误的)

    - Wall -pedantic -Weffc++ -Werror
    

    【讨论】:

      【解决方案4】:

      使用makefile。即使对于非常小的(= 一个文件)项目,付出努力可能也是值得的,因为您可以有几组编译器设置来测试事物。通过这种方式,调试和部署工作变得更加容易。

      阅读make manual,乍一看似乎很长,但大多数部分您可以略读。总而言之,这花了我几个小时,让我的工作效率大大提高。

      【讨论】:

        【解决方案5】:

        如果是简单的单源程序:

        make foo
        

        其中源文件为 foo.c 或 foo.cpp 等。

        您甚至不需要生成文件。 Make 有足够的内置规则将您的源文件构建为同名的可执行文件,减去扩展名。

        运行刚刚构建的可执行文件与运行任何程序相同 - 但您通常需要指定可执行文件的路径,因为 shell 只会搜索 $PATH 中的内容以查找可执行文件,而且大多数情况下确实如此不包括当前目录 (.)。

        所以要运行构建的可执行文件foo:

        ./foo
        

        【讨论】:

        • 我没有意识到内置规则传播到调用 make 时指定的目标。今天学到了新东西 =)
        • "-bash: make: command not found"
        • 不是make main.cpp,而是make main
        • ./ 在 ./foo 中做了什么?
        • @FabianAmran 指的是当前目录。 shell 将仅在$PATH 环境变量中列出的目录中查找要执行的程序,除非在运行程序时指定了路径。出于安全原因,.(当前目录)通常不在$PATH 中。
        【解决方案6】:

        Unix(Linux、Mac OS X、AIX 等)环境中的所有应用程序执行都取决于可执行文件搜索路径。

        您可以使用以下命令在终端中显示此路径:

        回显 $PATH

        在 Mac OS X 上(默认情况下)这将显示以下冒号分隔的搜索路径:

        /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

        因此,列出目录中的任何可执行文件都可以通过键入其名称来运行。例如:

        cat mytextfile.txt

        这会运行 /bin/cat 并将 mytextfile.txt 显示到终端。

        要运行不在可执行文件搜索路径中的任何其他命令,您需要限定可执行文件的路径。假设我在 Mac OS X 的主目录中有一个名为 MyProgram 的可执行文件,我可以完全限定它:

        /Users/oliver/MyProgram

        如果您位于要执行的程序附近的位置,您可以使用部分路径限定名称。例如,如果 MyProgram 在目录 /Users/oliver/MyProject 我和我在我的主目录中,我可以像这样限定可执行文件名称,并让它执行:

        我的项目/我的程序

        或者说我在/Users/oliver/MyProject2 目录中,我想执行/Users/oliver/MyProject/MyProgram 我可以使用这样的相对路径来执行它:

        ../MyProject/MyProgram

        同样,如果我与MyProgram 在同一目录中,我需要使用“当前目录”相对路径。您所在的当前目录是句点字符后跟一个斜杠。例如:

        ./我的程序

        要确定您当前在哪个目录,请使用pwd 命令。

        如果您通常将程序放在硬盘上您希望运行而无需限定其名称的位置。例如,如果您的主目录中有一个“bin”目录用于存放其他程序的常用 shell 脚本,那么更改可执行文件搜索路径可能是明智之举。

        这可以通过在您的主目录中创建或编辑现有的.bash_profile 文件并添加以下行来轻松完成:

        #!/bin/sh
        export PATH=$PATH:~/bin
        

        这里使用波浪号 (~) 字符作为 /Users/oliver 的快捷方式。另请注意,井号 (#!) 行必须是文件的第一行(如果它尚不存在)。另请注意,此技术要求您的登录 shell 为 bash(Mac OS X 和大多数 Linux 发行版的默认设置)。另请注意,如果您希望安装在~/bin 中的程序优先于系统可执行文件使用,您应该重新排序导出语句,如下所示:

        export PATH=~/bin:$PATH
        

        【讨论】:

        • 看起来是个好主意 编辑:nvm 我很讽刺。只是所有 $PATH 的东西都让我想起了 Windows“环境变量”,你不应该把它们弄得太多
        【解决方案7】:

        这是适用于所有 Unix 机器的命令...我在 Linux/Ubuntu 上使用它,但它也适用于 OS X。在 Terminal.app 中键入以下命令。

        $ g++ -o lab21 iterative.cpp
        

        -o 是字母 O 不是零

        lab21 将是您的可执行文件

        iterative.cpp 是你的 c++ 文件

        运行该命令后,在终端中键入以下内容以运行您的程序:

        $ ./lab21
        

        【讨论】:

          【解决方案8】:

          我找到了这个带有方向的链接:

          http://www.wesg.ca/2007/11/how-to-write-and-compile-c-programs-on-mac-os-x/

          基本上你会这样做:

          gcc hello.c
          ./a.out (or with the output file of the first command)
          

          【讨论】:

          • 你的意思是gcc hello.c -o a.out吗?与gcc hello.c 相同。
          【解决方案9】:

          Ryan,我将其更改为答案而不是评论,因为看起来我太简短了。在“终端”中执行所有这些操作。

          要使用 G++ 编译器,您需要这样做:

          1. 导航到您存储 *.cpp 文件的目录。

            cd ~/programs/myprograms/
            (~是你家的快捷方式,即/Users/Ryan/programs/myprograms/,替换成你实际使用的位置。)

          2. 编译

            g++ input.cpp -o output.bin(output.bin 可以是任何扩展名,真的。bin 在 unix 上很常见。)

            如果成功,应该不会返回任何内容,这是好的。通常,您会因失败而获得回报。

            但是,如果您键入ls,您将看到同一目录中的文件列表。例如,您会看到其他文件夹 input.cpp 和 output.bin

          3. 从目录内部,现在用./outbut.bin执行它

          【讨论】:

          • 感谢这工作。你会碰巧知道任何可以解释这些事情的教程吗?就像 G++ 的确切含义,'o' 开关是什么以及可能出现的其他任何东西?
          • 添加关于make 的评论将无法工作,因为没有生成文件。
          • Ryan,您可以在终端中键入“man g++”以获取“手册页”(即手册,我猜 Apple 已嵌入)。不过,我还没有看到任何很棒的教程。虽然,g++ 的手册页可能会非常深入地介绍 CFLAGS 和各种高级编译选项。
          • Nitpick:“如果成功,应该没有 [打印],这没关系。通常你会在失败时得到 [输出]。”总会有一个返回值,0代表成功,非0代表失败。
          • stackoverflow.com/questions/13714436/…合并(试图整合一些基本说明)
          【解决方案10】:

          对我来说两个步骤:

          第一:

          make foo
          

          然后:

          ./foo
          

          【讨论】:

          • 对不起,我绝对是个菜鸟。这里的 foo 是什么?
          【解决方案11】:

          执行此操作的紧凑方法可能是:

          make foo && ./$_
          

          很高兴有一个单行,这样您就可以轻松地再次运行您的可执行文件。

          【讨论】:

            【解决方案12】:

            使用终端运行 .C 文件是一个两步过程。 第一步是在终端输入gcc并将.C文件拖放到终端,然后按Enter

            username$ gcc /Desktop/test.c 
            

            第二步,运行如下命令:

            username$ ~/a.out
            

            【讨论】:

              【解决方案13】:

              要编译 C 或 C++ 程序,有一个常用命令:

              1. make filename

              2. ./filename

              make 会将您的源文件构建为具有相同名称的可执行文件。但是如果你想使用标准的方式,你可以使用 gcc 编译器来构建 C 程序 & g++ for c++

              对于 C:

              gcc filename.c
              
              ./a.out
              

              对于 C++:

              g++ filename.cpp
              
              ./a.out
              

              【讨论】:

                【解决方案14】:

                只要输入你的 c/cpp 文件所在的目录即可。

                用于编译和运行 c 代码。

                $gcc filename.c
                $./a.out filename.c
                

                用于编译和运行 c++ 代码。

                $g++ filename.cpp
                $./a.out filename.cpp
                

                “$”是默认的mac终端符号

                【讨论】:

                  【解决方案15】:

                  为了从 Mac 终端编译和运行 cpp 源代码,需要执行以下操作:

                  1. 如果cpp文件的路径是somePath/fileName.cpp,先进入路径为somePath的目录
                  2. 要编译 fileName.cpp,请键入 c++ fileName.cpp -o fileName
                  3. 要运行程序,请输入 ./fileName

                  【讨论】:

                    【解决方案16】:

                    对于运行 c++ 文件,请运行以下命令,假设文件名为“main.cpp”

                    1.从c++文件编译生成目标文件。

                    g++ -c main.cpp -o main.o
                    

                    2.由于#include <conio.h>在MacOS中不支持,所以我们应该使用它在Mac中支持的替代品#include <curses.h>。现在需要将目标文件转换为可执行文件。要使用curses.h,我们必须使用库-lcurses

                    g++ -o main main.o -lcurses
                    

                    3.现在运行可执行文件。

                    ./main
                    

                    【讨论】:

                      【解决方案17】:

                      您需要进入保存文件的文件夹。 编译代码:gcc fileName 您也可以使用g++ fileName 这将编译您的代码并创建一个二进制文件。 现在在同一文件夹中查找二进制文件并运行它。

                      【讨论】:

                        【解决方案18】:

                        第 1 步 - 使用命令创建 cpp 文件

                        触摸测试.cpp

                        第 2 步 - 运行此命令

                        g++ test.cpp

                        第 3 步 - 运行您的 cpp 文件

                        ./a.out

                        【讨论】:

                          猜你喜欢
                          • 2010-10-18
                          • 2015-11-03
                          • 2020-11-29
                          • 2012-12-23
                          • 2018-10-05
                          • 2015-11-18
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多