[英]Compiling a .CPP using GCC
如何使用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 ::?
memcpy
和strncmp
在<cstring>
中声明, atoi
和atol
在<cstdlib>
。 只需包含这些标头即可引入其声明。
注意事项:
#include ""
之后不能使用分号。 using namespace std;
, 尤其是没有标题! -lstdc++
与标准库链接,或使用g++
其转发给您的链接器。 请注意,使用GCC,您不必在标准C函数之前加上std::
:(因为它们也在全局命名空间中声明),但是无论如何,您都应该使代码符合标准。
cplusplus网站可以提供帮助。 如果您搜索特定的函数,则在顶部会找到要编译的代码的必要参考:
http://www.cplusplus.com/reference/cstdlib/atol/
您甚至可以签入URL。 在这种情况下,您需要“ cstdlib”。
关于编译器,有几种可用的方法,g ++是一个不错的选择。
我还建议创建一个使构建过程自动化的makefile,因为随着代码库的增长,它变得很麻烦。
对于您在代码中使用的任何库函数,请阅读该函数的手册页以查看哪个标头声明了该标头,然后在使用该函数的任何源文件中将该标头包含#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>
。
我收到很多错误:
memcpy
,atoi
,atol
,strncmp
等,
memcpy
和strncmp
在<cstring>
中声明。 atoi
和atol
是<cstdlib>
(如果使用C而不是C ++进行编程,则位于<string.h>
和<stdlib.h>
中)。
并且一定要使用g++
命令而不是gcc
命令来编译C ++源代码。 它们都调用相同的编译器(如果源文件名以.cpp
结尾,则gcc
编译C ++代码),但是g++
命令添加了C ++所需的一些选项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.