【问题标题】:Compiling a .CPP using GCC使用 GCC 编译 .CPP
【发布时间】:2015-06-03 13:04:03
【问题描述】:

如何使用 GCC 编译 .c 或 .cpp 文件? 我需要包含一些标准库(fstream、string、iostream)——我该怎么做?

为了澄清,这里:

#pragma once
#include <iostream>
#include <fstream>
#include <string>
#include"ocgenerator.h";
#include"structures.h";
#include"util.h";
#include"util2.h";
using namespace std;

(我的 .h 文件与 src 文件在同一目录中) 如果我使用命令: gcc src.cpp -o src.o

我收到很多错误:memcpy、atoi、atol、strncmp 等,...“未在此范围内声明”。我应该在命令中添加什么?

edit:或者它是一个范围的东西,我是否必须将 std:: 添加到所有这些函数?

【问题讨论】:

  • #include &lt;cstring&gt;, #include &lt;cstdlib&gt;.

标签: c++ linux gcc compilation


【解决方案1】:

memcpystrncmp&lt;cstring&gt; 中声明,atoiatol&lt;cstdlib&gt; 中。只需包含这些标头即可引入它们的声明。

旁注:

  • 预处理指令后没有分号,包括#include ""
  • 没有using namespace std;尤其是不在标题中!
    (Why is "using namespace std" considered bad practice?)
  • 由于您正在构建 C++ 项目,请不要忘记通过 -lstdc++ 与标准库链接,或使用 g++ 将其转发给您的链接器。

请注意,使用 GCC,您不必为标准 C 函数添加前缀 std::(因为它们也在全局命名空间中声明),但无论如何您都应该让您的代码符合标准。

【讨论】:

    【解决方案2】:

    cplusplus 网站提供帮助。如果您搜索特定函数,您会在顶部找到要编译的代码的必要参考:

    http://www.cplusplus.com/reference/cstdlib/atol/

    您甚至可以签入网址。在这种情况下,您需要 'cstdlib'。

    关于编译器,有几个可用的,g++ 是一个不错的选择。

    我还建议创建一个 makefile 来自动化构建过程,因为当你的代码库增长时它会变得很头疼。

    【讨论】:

      【解决方案3】:

      对于您在代码中使用的 any 库函数,请阅读该函数的手册页以查看哪个标头声明了它,以及使用该函数的任何源文件中的 #include 该标头。

      例如,man memcpy 显示了 memcpy(3) 手册页((3) 指的是手册的第 3 部分;使用 man 3 memcpy 指定部分)。

      姓名
      memcpy - 复制内存区域

      概要
      #include &lt;string.h&gt;

      void *memcpy(void *dest, const void *src, size_t n);
      ...

      memcpy 是 C 标准库的一部分,在 &lt;string.h&gt; 中声明。对于 C++,您可以使用 &lt;string.h&gt;,但最好使用 &lt;cstring&gt;,它将函数名称放在 std 命名空间中。通常,每个标准 C 标头 &lt;foo.h&gt; 都被复制为 C++ 标头 &lt;cfoo&gt;

      我收到很多错误:memcpyatoiatolstrncmp 等,

      memcpystrncmp&lt;cstring&gt; 中声明。 atoiatol&lt;cstdlib&gt; (如果您使用 C 而不是 C++ 编程,则在 &lt;string.h&gt;&lt;stdlib.h&gt; 中)。

      并且一定要使用g++ 命令,而不是gcc 命令来编译C++ 源代码。它们都调用相同的编译器(如果源文件名以.cpp 结尾,gcc 编译 C++ 代码),但g++ 命令添加了一些 C++ 所需的选项。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-12
        • 1970-01-01
        • 1970-01-01
        • 2015-06-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多