zoukankan      html  css  js  c++  java
  • 在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

  • 相关阅读:
    正则匹配中 ^ $ 和  的区别
    jQuery 选择同时包含两个class的元素的实现方法
    JSON—去除JSON数据中的所有HTML标…
    HTML5 自定义属性 data-*属性名一定要小写吗?
    Java线程池(ExecutorService)使用
    ExecutorService中submit和execute的区别
    启用Microsoft loopback Adapte
    【Spring】如何配置多个applicationContext.xml文件
    C#编程之AES加密(一)
    C#编程之利用C#创建dll并调用(三)
  • 原文地址:https://www.cnblogs.com/lidabo/p/3804500.html
Copyright © 2011-2022 走看看