linux下使用g++编译cpp工程的方法_C 语言

来源:脚本之家  责任编辑:小易  

第一步:在red hat系列的fedoral 中可以通过如下命令安装gcc 或者g++yum in

C++编程中相关文件后缀

g++是用来编译c++程序的,假如你想生成名为test的可执行文件,源文件为1.cpp的话,使用g+

1.单个源文件生成可执行程序

因为gcc只能编译C语言编写的程序,有的程序是用C++写的,所以编译的时候就要使用G++,或者手动加

下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码:

*运行 gcc/egcs*gcc/egcs 的主要选项*gdb*

/* helloworld.cpp */ #include <iostream> int main(int argc,char *argv[]) { std::cout << "hello, world" << std::endl; return(0); }

首先把Boost库的头文件存放到/usr/include/boost/路径下,再把Lib文件存放到/

程序使用定义在头文件 iostream 中的 cout,向标准输出写入一个简单的字符串。该代码可用以下命令编译为可执行文件:

与其他三名名模相比,秦舒培相对弱势,毕竟近年来她的作品并不多,而且出镜率也不高。2012凤凰时尚之选时尚领袖大奖?2011ELLE风尚大典国际超模新秀?2010ELLE风尚大典年度风尚超模?2009中国风尚超模颁奖典礼潜力超模大奖这些是近年秦舒培获奖情况,但是都是几年前了。之后参加的有名气的活动不多,也让她的名气开始下滑。相比之下,刘雯、奚梦瑶和何穗,自上次参加了维密之后,人气依然很高,而且持续上涨。如果你是维密的评委,你会怎么选择呢!且不说其他的,前段时间香奈儿的活动,国内众多明星都参加了,刘雯大表姐也是其一,可见名气不减当年。再说下何穗,不管是街拍还是电视活动,近期都不少。据说这是东方卫视

$ g++ helloworld.cpp

长期开空调寒气就会找上门,这时候用厨房里的一味食材花椒泡水就能解决,花椒真的这么神奇吗?我们一起来看看。1、花椒泡水之驱寒祛湿:花椒喜欢阳光充足、温暖肥沃的地方,性温,三伏天闷热,时不时的来场大雨,加上长期待在空调房里,寒气和湿气就很可能入侵到我们的体内。这时候花椒泡水,可以帮助我们驱除五脏六腑的寒湿之气,尤其对于风湿关节炎、体质虚寒的人群,都可以很好的起到缓解的作用。2、花椒泡水之止泻、预防感冒:夏季天气炎热,爱吃些生冷的食物,就很容易给肠胃带来负担,发生腹泻的症状,体质弱的人开了一晚上的空调还会受风寒,而花椒对于风寒、有腹泻的人是个很好的选择。另外,据《本草纲目》记载:“花椒是纯阳的食物,

编译器 g++ 通过检查命令行中指定的文件的后缀名可识别其为 C++ 源代码文件。编译器默认的动作:编译源代码文件生成对象文件(object file),链接对象文件和 libstdc++ 库中的函数得到可执行程序。然后删除对象文件。由于命令行中未指定可执行程序的文件名,编译器采用默认的 a.out。程序可以这样来运行:

本人做鞋6年有余,实在生意人,拒绝暴利,有需要看我空间置顶文章最后一图都是帆布鞋,其实差距并不大,主要还是看品牌文化,万斯滑板鞋,街头风,很多顶级明星都上脚,自然大众穿的多,脚感方面,穿过的都知道,万斯非常舒适,相比回力更软,其他没什么,鞋子水深,万斯技术含量也不是很高,市面很多差的版本,要zp一定去专柜,要性价比就可以选择公司级的原厂版本,有需要的可以看我空间置顶文章的最后一图或者私信

$ ./a.out

这两年安卓手机提升最快的是内存,从最初的256MB一路狂飙,发展到现在的8GB,对于用户来说,高的内存是有必要的,因为安卓系统的内存机制问题,导致不少应用爱抢占内存资源,这也是为什么不少用户经常吐槽,iPhone2GB内存的系统流畅度可以秒杀安卓手机4GB,甚至是6GB内存的表现。安卓手机到底多大内存适合,6GB是不是最完美的,8GB是不是有点多余的?以2GB内存的诺基亚、6GB和8GB内存的一加5来实验,其实得到的效果是,在2GB内存下的诺基亚3,其设定的机制始终让可用内存保持在在500MB以上,所以打开三个应用后,再打开第四个APP时,前面的第一个应用就被后台清理了。而在6GB的手机上,有

hello, world

更普遍的做法是通过 -o 选项指定可执行程序的文件名。下面的命令将产生名为 helloworld 的可执行文件:

 $ g++ helloworld.cpp -o helloworld

在命令行中输入程序名可使之运行:

 $ ./helloworld 

hello, world

程序 g++ 是将 gcc 默认语言设为 C++ 的一个特殊的版本,链接时它自动使用 C++ 标准库而不用 C 标准库。通过遵循源码的命名规范并指定对应库的名字,用 gcc 来编译链接 C++ 程序是可行的,如下例所示:

$ gcc helloworld.cpp -lstdc++ -o helloworld

选项 -l (ell) 通过添加前缀 lib 和后缀 .a 将跟随它的名字变换为库的名字 libstdc++.a。而后它在标准库路径中查找该库。gcc 的编译过程和输出文件与 g++ 是完全相同的。

在大多数系统中,GCC 安装时会安装一名为 c++ 的程序。如果被安装,它和 g++ 是等同,如下例所示,用法也一致:

 $ c++ helloworld.cpp -o helloworld

2.多个源文件生成可执行程序

如果多于一个的源码文件在 g++ 命令中指定,它们都将被编译并被链接成一个单一的可执行文件。下面是一个名为 speak.h 的头文件;它包含一个仅含有一个函数的类的定义:

/* speak.h */ #include <iostream> class Speak { public: void sayHello(const char *); };

下面列出的是文件 speak.cpp 的内容:包含 sayHello() 函数的函数体:

/* speak.cpp */ #include "speak.h" void Speak::sayHello(const char *str) { std::cout << "Hello " << str << "\n"; }

文件 hellospeak.cpp 内是一个使用 Speak 类的程序:

/* hellospeak.cpp */ #include "speak.h" int main(int argc,char *argv[]) { Speak speak; speak.sayHello("world"); return(0); }

下面这条命令将上述两个源码文件编译链接成一个单一的可执行程序:

 $ g++ hellospeak.cpp speak.cpp -o hellospeak

PS:这里说一下为什么在命令中没有提到“speak.h“该文件(原因是:在“speak.cpp“中包含有”#include"speak.h"“这句代码,它的意思是搜索系统头文件目录之前将先在当前目录中搜索文件“speak.h“。而”speak.h“正在该目录中,不用再在命令中指定了)。

3.源文件生成对象文件

选项 -c 用来告诉编译器编译源代码但不要执行链接,输出结果为对象文件。文件默认名与源码文件名相同,只是将其后缀变为 .o。例如,下面的命令将编译源码文件 hellospeak.cpp 并生成对象文件 hellospeak.o:

$ g++ -c hellospeak.cpp

命令 g++ 也能识别 .o 文件并将其作为输入文件传递给链接器。下列命令将编译源码文件为对象文件并将其链接成单一的可执行程序:

$ g++ -c hellospeak.cpp $ g++ -c speak.cpp $ g++ hellospeak.o speak.o -o hellospeak

选项 -o 不仅仅能用来命名可执行文件。它也用来命名编译器输出的其他文件。例如:除了中间的对象文件有不同的名字外,下列命令生将生成和上面完全相同的可执行文件:

$ g++ -c hellospeak.cpp -o hspk1.o $ g++ -c speak.cpp -o hspk2.o $ g++ hspk1.o hspk2.o -o hellospeak

4.编译预处理

选项 -E 使 g++ 将源代码用编译预处理器处理后不再执行其他动作。下面的命令预处理源码文件 helloworld.cpp 并将结果显示在标准输出中:

 $ g++ -E helloworld.cpp

本文前面所列出的 helloworld.cpp 的源代码,仅仅有六行,而且该程序除了显示一行文字外什么都不做,但是,预处理后的版本将超过 1200 行。这主要是因为头文件 iostream 被包含进来,而且它又包含了其他的头文件,除此之外,还有若干个处理输入和输出的类的定义。

预处理过的文件的 GCC 后缀为 .ii,它可以通过 -o 选项来生成,例如:

 $ gcc -E helloworld.cpp -o helloworld.ii

5.生成汇编代码

选项 -S 指示编译器将程序编译成汇编语言,输出汇编语言代码而後结束。下面的命令将由 C++ 源码文件生成汇编语言文件 helloworld.s:

$ g++ -S helloworld.cpp

生成的汇编语言依赖于编译器的目标平台。

6.创建静态库

静态库是编译器生成的一系列对象文件的集合。链接一个程序时用库中的对象文件还是目录中的对象文件都是一样的。库中的成员包括普通函数,类定义,类的对象实例等等。静态库的另一个名字叫归档文件(archive),管理这种归档文件的工具叫 ar 。

在下面的例子中,我们先创建两个对象模块,然后用其生成静态库。

头文件 say.h 包含函数 sayHello() 的原型和类 Say 的定义:

/* say.h */ #include <iostream> void sayhello(void); class Say { private: char *string; public: Say(char *str) { string = str; } void sayThis(const char *str) { std::cout << str << " from a static library\n"; } void sayString(void); };

下面是文件 say.cpp 是我们要加入到静态库中的两个对象文件之一的源码。它包含 Say 类中 sayString() 函数的定义体;类 Say 的一个实例 librarysay 的声明也包含在内:

/* say.cpp */ #include "say.h" void Say::sayString() { std::cout << string << "\n"; } Say librarysay("Library instance of Say");

源码文件 sayhello.cpp 是我们要加入到静态库中的第二个对象文件的源码。它包含函数 sayhello() 的定义:

/* sayhello.cpp */ #include "say.h" void sayhello() { std::cout << "hello from a static library\n"; }

下面的命令序列将源码文件编译成对象文件,命令 ar 将其存进库中:

$ g++ -c sayhello.cpp $ g++ -c say.cpp $ ar -r libsay.a sayhello.o say.o

程序 ar 配合参数 -r 创建一个新库 libsay.a 并将命令行中列出的对象文件插入。采用这种方法,如果库不存在的话,参数 -r 将创建一个新的库,而如果库存在的话,将用新的模块替换原来的模块。

下面是主程序 saymain.cpp,它调用库 libsay.a 中的代码:

/* saymain.cpp */ #include "say.h" int main(int argc,char *argv[]) { extern Say librarysay; Say localsay = Say("Local instance of Say"); sayhello(); librarysay.sayThis("howdy"); librarysay.sayString(); localsay.sayString(); return(0); }

该程序可以下面的命令来编译和链接:

 $ g++ saymain.cpp libsay.a -o saymain

程序运行时,产生以下输出:

hello from a static library

howdy from a static library

Library instance of Say

Local instance of Say

总结

到此这篇关于linux下使用g++编译cpp工程的文章就介绍到这了,更多相关linux g++编译cpp内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网!

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

Linux下用g++编译c程序出错。。

我用一个例子来告诉你怎么样在 C++ 里使用C的头文件/函数。

比方说我有一个C的头文件叫 c.h, C的源码文件叫 c.c,内容分别是

c.h:

#ifndef _ASDFD_INCLUDED_

#define _ASDFD_INCLUDED_

#include <stdio.h>

extern int test(int a);

#endif

c.c:

#include "c.h"

int test(int a)

{

printf("A = %d\n", a);

return a*a;

}

现在我想在c++中使用c.c中提供的函数test(),我的c++文件名字叫 a.cpp,那么里面跟C有关的部分就要用 extern "C" {} 大括号括起来,看看我的

a.cpp:

#include <iostream>

using namespace std;

extern "C"

{

#include "c.h"

}

int main()

{

int b = 12;

b = test(b);

cout<<"b = "<<b<<endl;

return 0;

}

看到了吧,#include "c.h" 被 extern "C" {}括起来了。

然后是如何编译,先把C文件编出目标文件(.o)来

gcc -c c.c

你会看到生成了 c.o,其实,有目标文件就够了,如果你一定要做成(静态/动态)库文件,也是可以的,不过我这里就不深入了,做成库和直接用目标文件对解决你的问题没有任何区别。

然后再编译C++文件,也就是我的 a.cpp

g++ -o hello a.cpp c.o

看到了吧,我在编译 a.cpp 的时候把C生成的 c.o也加上了。 然后生成 可执行的 hello, 运行

./hello

就可以看到

A = 12

b = 144

关于创建静态库,假定你有3个C文件, a.c, b.c, c.c 提供了你C++要用到的接口,那么可以把这三个C文件编译出来的目标文件放到一个库文件里供C++使用,方法为

先编译出目标文件

gcc -c a.c b.c c.c

这时候你应该看到有 a.o b.o c.o了

然后创建库文件

ar cr libtest.a a.o b.o c.o

这三个目标文件就放入 libtest.a 这个静态库中了,然后编译C++程序 (你的C++程序应该已经按照我前面说的用 extern "C" 把C的接口都括起来了),假定你的 libtest.a 放在 /home/aaa/lib下

g++ -o my.exe my.cpp -L/home/aaa/lib -ltest

就会生成可执行文件 my.exe了。

在linux下用终端编译cpp源文件

gcc -o a ~/a.cpp

-o是用来指定编译链接后输出的可执行程序的名字,如果不指定的话gcc会默认输出到a.out。

编译成功后运行~/a就可以执行你的程序了。

Linux 下c语言怎样调用C++的函数,怎么编译,举个例子

完全和windows 下面没有语法区别

在编译之前我们需要在系统里安装G++ GCC,它们就是Linux下的C++/C的编译器。代码如下

代码:

sudo apt-get install build-essential

sudo apt-get install gcc

sudo apt-get install g++

#include <iostream>

using namespace std;

int main()

{

    cout<<"Hello,World!\n"<<endl;

    return 0;

}

另一个带c++库函数

#include<iostream>

#include<stack>

using namespace std;

int sushu(int n)

{

    int i;

    for(i=2;i<n;i++)

    {

        if(n%i==0)

            break;

    }

    if(n==i && n!=1)

        return 1;

    else

        return 0;

}

int main()

{

    int n,i,j;

    stack<int> mystack;

    cin>>n;

    while(n>1)

    {

        for (i=2;i<=n;i++)

        {

            if (n%i==0 &&sushu(i)==1)

            {

                mystack.push(i);

                n=n/i;

                break;

            }

        }

    }

    while(!mystack.empty())

    {

        cout<<mystack.top()<<" ";

        mystack.pop();

    }

    return 0;

}

名称为 test.cpp

你使用 

g++ test.cpp

./a.out

追问这都是C++,能加个q吗追答好的

用gcc/g++如何编译android工程中的.c/.cpp程序,如何查看android工程师.c/.cpp文件需要的依赖及如何解决

目前暂不支持开发工具编译C、c++代码生成so文件,应该后续版本会有的。.so 为共享库,是shared object,用于动态连接的,和dll差不多,可以这样调用so文件:得到/usr/java/jdk1.5.0_13/jre/lib/i386,将SO文件放在该目录下运行java程序,输出了由C语言函数计算出的结果以引擎自带的HelloCpp为例配置C++的的自动编译。在eclipse中导入hellocpp工程。操作路径:eclipse--file--import工程导入后,右击工程--properties取消CDT builder。然后点击New新建一个我们自己的builder,选择program。指定ndk-build.cmd来编译我们的项目,下面的工作路径将作为参数传入给ndk-build.cmd添加NDK_MODULE_PATH变量,注意要写两个路径[cocos2d-x安装目录和其目录下\cocos2dx\platform\third_party\android\prebuilt],用分号分开最后点OK保存。因为不是执行build_native.sh编译本地代码,所以别忘了手动拷贝下hellocpp工程下resource中的资源到android工程assets.可以在命令行下编译多个C/CPP文件,通过cl -c命令来编译类文件,编译成obj文件后,你可以使用lib命令将其编译为lib文件,然后使用link命令连接多个obj文件。默认生成的可执行文件的名称是命令中第一个obj文件的名称,具体参考代码如下:

  • 本文相关:
  • linux环境使用g++编译c++方法总结
  • linux下g++编译与使用静态库和动态库的方法
  • linux环境g++编译gdal动态库操作方法
  • 详解 linux c++的编译器g++的基本使用
  • linux 下 g++编译程序时-i(大写i) 与-l(大写l)-l(小写l) 的作用详解
  • 如何寻找数组中的第二大数
  • dhcp:解析开发板上动态获取ip的2种实现方法详解
  • c++实现获取ip、子网掩码、网关、dns等本机网络参数的方法
  • c语言中使用bf-kmp算法实例
  • c语言中fgetgrent()函数和fgetpwent()函数的用法对比
  • c语言从txt文件中逐行读入数据存到数组中的实现方法
  • c语言中的getchar和putchar的使用方法
  • c++ namespace相关语法实例分析
  • c语言中利用封装好的函数实现英文字母的大小写转换
  • c语言实现2048游戏代码
  • Linux下用g++编译c程序出错。。
  • 在linux下用终端编译cpp源文件
  • Linux 下c语言怎样调用C++的函数,怎么编译,举个例子
  • 用gcc/g++如何编译android工程中的.c/.cpp程序,如何查看android工程师.c/...
  • 我在linux下尝试编了个C程序 用g++,编译通过了 但没有.out文件
  • 菜鸟如何在linux上实现c和c++编程
  • LINUX下如何用G++编c++,给一个详细的实例就好
  • linux下c编程,为什么有些程序用g++就可以编译,而用gcc时必须加上-lstdc++呢?
  • linux 用g++编译c++代码的问题
  • Linux下G++怎么编译使用Boost库的程序
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全c#教程vbvb.netc 语言java编程delphijavaandroidiosswiftscala易语言汇编语言其它相关首页c 语言linux环境使用g++编译c++方法总结linux下g++编译与使用静态库和动态库的方法linux环境g++编译gdal动态库操作方法详解 linux c++的编译器g++的基本使用linux 下 g++编译程序时-i(大写i) 与-l(大写l)-l(小写l) 的作用详解如何寻找数组中的第二大数dhcp:解析开发板上动态获取ip的2种实现方法详解c++实现获取ip、子网掩码、网关、dns等本机网络参数的方法c语言中使用bf-kmp算法实例c语言中fgetgrent()函数和fgetpwent()函数的用法对比c语言从txt文件中逐行读入数据存到数组中的实现方法c语言中的getchar和putchar的使用方法c++ namespace相关语法实例分析c语言中利用封装好的函数实现英文字母的大小写转换c语言实现2048游戏代码c语言程序设计50例(经典收藏)c语言10个经典小程序c语言字符串操作总结大全(超详细c语言文件操作函数大全(超详细)c语言字符数组与字符串的使用详解c语言运算符优先级列表(超详细)c语言/c++中如何产生随机数c++中的string常用函数用法总结深入理解c++中public、protectedc++常用字符串分割方法实例汇总c++临时性对象的生命周期详细解析浅谈cmake配置opencv 时静态链接与动态链linux网络编程之socket文件传输示例详解c++编程中的嵌套类的声明与其中的函数opencv 2.4.3 c++ 平滑处理分析从汇编看c++中变量类型的深入分析c语言中的链接编写教程c++ auto类型说明符聊一聊opencv相机标定c++ vector容器实现贪吃蛇小游戏
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved