使用GCC编译.CPP

时间:2015-06-03 13:04:04

标签: c++ linux gcc compilation

如何使用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等,......“未在此范围内声明”。我应该在命令中添加什么?

编辑:或者它是一个范围的东西,我是否必须将std ::添加到所有这些功能?

3 个答案:

答案 0 :(得分:1)

memcpystrncmp<cstring>atoiatol <cstdlib>中声明。只需包含这些标题即可引入其声明。

附注:

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

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

答案 1 :(得分:0)

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

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

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

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

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

答案 2 :(得分:0)

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

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

  

命名
    memcpy - 复制记忆区域

     

<强>概要
   #include <string.h>

     

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

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

  

我收到很多错误:memcpyatoiatolstrncmp等,

memcpystrncmp<cstring>中声明。 atoiatol<cstdlib>(或<string.h><stdlib.h>,如果您使用C而不是C ++进行编程。)

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