在linux下如何编译C++程序

一、GCC(GNU Compiler Collection)是linux下最主要的编译工具,GCC不仅功能非常强大,结构也异常灵活。它可以通过不同的前端模块来支持各种语言,如Java、Fortran、Pascal、Modula-3和Ada

         g++是GCC中的一个工具,专门来编译C++语言的。

         GCC的参数有:( 也是分步实现)

                                  -E  让GCC在预处理结束后停止编译  g++ -E hello.cpp  -o  hello.i

                                   -c  将hello.i编译成目标代码 g++  -c  hello.i  -o  hello.o

                                   将目标文件连接成可执行文件   g++ hell.o   -o   hello

           可以一步实现   g++  hello.cpp  -o  hello

 

二、假如有两个以上源文件应该一下编译。

         一步就实现      g++   foo1.cpp   foo2.cpp   -o   foo

        也可以分步实现   g++   -c   foo1.cpp  -o   foo1.o

                                       g++   -c    foo2.cpp  -o   foo2.o

                                       g++   foo1.o  foo2.o    -o    foo

三、GCC一些常用选项

         1、产生警告信息的选项大多数以-W开头  其中有-Wall

              g++  -Wall  hello.cpp   -o   hello

         2、将所有的警告当成错误的选项-Werror

               g++ -Werror  hello.cpp  -o  hello

          3、寻找头文件选项 -I    (linux默认路径:头文件在/usr/include/下),不在这个路径下就要用-I指定。

              gcc  foo.cpp  -I/home/include   -o  foo

          4、 库依赖选项     -L      (linux默认路径:库文件在/usr/lib/下),不在这个路径下就要用-L指定。

                g++  foo.cpp  -L/home/lib  -lfoo  -o   foo

               库就是将源文件编译之后生成的目标文件的集合。

               库命名以lib开头。

                库有静态库(通常以.a结尾)和动态库(通常以.so结尾)

                默认情况下,g++以动态库形式连接。如果要静态库连接则要用-static指定(g++ foo.cpp  -L/home/lib  -static  -lfoo  -o  foo)

          5、优化选项  -On  (n取0到3之间)

 

四、介绍一些GNU 二进制链工具

          1、ar命令(也称为工具)   可以用来编译成静态库

              ar  [-] {操作选项} {任选项} [成员名] [count] archive files....

              ar r v  libtest.a  hello.o  hello1.o  生成一个库名为test,该库中存放了hello.o和hello1.o这两个模块。

               操作项:d (删除)、  m(移动)、p(标准输出)、q(快速追加)、r(在库中插入模块)、t(显示库的模块清单)、x(从库中提取一个成员)。

              任选项:a(成员后面添加一个新文件)、b(成员前面添加一个新文件)、c(创建一个库)、f(截短指定名字)、v(显示执行操作选项的附加信息)。

          2、编译成动态库

               分步完成: gcc  -fPIC  -c  func.cpp  -o  func.o

                                     gcc -shared  -o  libfunc.so  func.o

               一步就完成:gcc -fPIC  -shared -o libfunc.so  func.cpp

时间: 2024-11-05 12:14:11

在linux下如何编译C++程序的相关文章

c语言问题-Linux下的C语言程序问题无限循环

问题描述 Linux下的C语言程序问题无限循环 这个程序我在Linux里用gcc编译,然后无限循环,我用ctrl+c但是只能停止循环,却不能退出运行,这是一个问题,还有一个就是为什么它会无限循环?我把for里面中间一个x!=9.9改成x<=9.9还是无限循环,为什么? 解决方案 杂记之C语言之无限循环 解决方案二: 改成<=9.9就不会出现这个情况的, 解决方案三: 亲测,改为<=9.9不是无限循环,用!=是无限循环的原因很简单,float,double的!=不能这么判断,比如你判断 a

Linux下c语言延迟程序

问题描述 Linux下c语言延迟程序 我用的Ubuntu14.04,想写了一个延迟程序,具体是延迟一秒输出一个 '.' : for(i =0;i<10;i++) {sleep(1);printf(".");} 但是效果是先延迟10秒再输出10个'.'要的效果是每一秒输出一个'.' 解决方案 Linux下C语言程序开发环境Linux下C语言程序开发环境Linux下C语言程序的编译过程 解决方案二: http://blog.chinaunix.net/uid-722885-id-12

arm 交互编译-linux 下arm编译问题,no such file or diractory

问题描述 linux 下arm编译问题,no such file or diractory 在寻你机上编译通过后,吧执行文件导入arm-linux中,总是提示-bash: no such file or diractory坑爹啊,虚拟机arm-linux-gnueabi-gcc-4.6.3,ab板子是A80板子,SDK自带的arm-linux-gnueabi-gcc-4.6.3不能用,资料上说是他们用的是arm-linux-gnueabi-gcc-4.6.3.还是可能是版本不兼容的问题嘛?还是其

qt5-求指导Linux下QT编译问题

问题描述 求指导Linux下QT编译问题 8C 本人新手 毕设要做一个QT版的聊天软件..下了一份代码 能运行 但是用最新的QT编译过不了求大神帮忙 万分感谢 解决方案 版本问题,找一下之前的版本试一下,qt就是这个比较坑 解决方案二: 请把你的编译错误信息贴出来,大家好给你帮忙啊 解决方案三: 编译出错应该是QT4到QT5的问题..现在好了 可是连接数据有问题 界面打不开 解决方案四: out of memory,内存不够了.还是你数据库连接字符串不正确 解决方案五: 1.什么叫"能运行倒是编

小工具 指令-linux下有没有可能将程序函数被像系统指令一样调用

问题描述 linux下有没有可能将程序函数被像系统指令一样调用 有没有可能将程序函数被像系统指令一样调用,就是程序在后台运行时只用终端 去调用程序里的函数,这个函数是程序的其中一部分. 意图是查看这个程序后台运行过程中里面变量的值.能否实现?谢谢!! 解决方案 if you use eclipse or .net studio to develop,you can run your project in debug mode

Nginx负载均衡与缓存服务器在Linux下的编译安装

1.环境描述&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;       nginx和tomcat1服务器地址:192.168.81.131       tomcat2服务器地址:192.168.81.128       tomcat3服务器地址:192.168.81.132 2.Nginx 负载均衡与5603.html">缓存服务器 (1).在 Linux 下的编译安装: cd Desktop/s

Linux下时间范围判断的程序流程及其C代码实现

一.概述 在实际的软件开发项目中,经常会遇到需要判断时间范围的情况.例如,某软件要在某段时间内执行对过期数据的清理,在其它时间段不执行.为了体现程序的灵活性,一般都是在配置文件中设置时间段的始末值,这样可根据软件的实际安装环境进行配置.本文介绍判断当前时间是否在配置的时间范围内的程序流程,并给出了C代码实现.具体的需求描述如下: 在配置文件中按需配置某一开始时间和结束时间,编写程序判断当前系统时间是否在配置时间的范围之内.配置的时间格式为:HH:MM(小时:分),如08:30表示8点30分. 二

linux下安装编译网卡驱动的方法

  安装linux操作系统后发现没有网卡驱动,表现为 system → Administration → Network下Hardware列表为空. 以下为安装编译网卡驱动的过程,本人是菜鸟,以下是我从网上找的资料进行整理,并实际操作的过程,仅供借鉴. 一.检测linux系统内核版本和网卡类型,相关命令如下: uname -r 查看linux内核版本 (uname -a 可显示所有信息) lsmod 设备加载情况 ls /usr/share/hwdata 查看硬件设备 lspci 查看pci网卡

C语言高级应用---操作linux下V4L2摄像头应用程序

我们都知道,想要驱动linux下的摄像头,其实很简单,照着V4L2的手册一步步来写,很快就可以写出来,但是在写之前我们要注意改变系统的一些配置,使系统支持framebuffer,在dev下产生fb0这样的节点,这样我们才能在linux系统上操作Camera摄像头,framebuffer在之前的博文已经有说过了,这里就不再提了. 有需要了解framebuffer的那么请点击:http://baike.baidu.com/view/3351639.htm        最重要的,我们需要改一个脚本,