设为首页 加入收藏

TOP

g++编译运行c++代码流程以及动态库静态库的创建与使用(一)
2018-10-28 16:08:32 】 浏览:99
Tags:编译 运行 代码 流程 以及 动态 静态 创建 使用

一、g++ 编译运行hello world


1编写hello world 代码


#include<iostream>


using namespace std;


int main()
{
  cout << "hello world!" << endl;
  return 0;
}


2 编译及运行


自动生成了a.out可执行的文件


linuxidc@shenyong-Opt790:~/work/cpp$ g++ hello.cpp
linuxidc@shenyong-Opt790:~/work/cpp$ ls
a.out  hello.cpp
linuxidc@shenyong-Opt790:~/work/cpp$ ./a.out
hello world!


二、程序运行步骤


预处理   .i .ii文件        gcc -E hello.cpp -o hello.i
编译    .s文件            gcc -S hello.cpp -o hello.s
汇编    .o .obj文件       gcc -c hello.cpp -o hello.o
链接    .lib .a文件1234


1 预处理


vim hello.i


  ...上面很长省略了..
  extern wostream wclog;


  static ios_base::Init __ioinit;


}
# 2 "hello.cpp" 2


using namespace std;


int main()
{
  cout << "hello world!" << endl;
  return 0;
}


2 编译


vim hello.s


      .file  "hello.cpp"
        .local  _ZStL8__ioinit
        .comm  _ZStL8__ioinit,1,1
        .section        .rodata
.LC0:
        .string "hello world!"
        .text
        .globl  main
        .type  main, @function
main:
.LFB971:
        .cfi_startproc
        pushq  %rbp
        .cfi_def_cfa_offset 16
        .cfi_offset 6, -16
        movq    %rsp, %rbp
        .cfi_def_cfa_register 6
        movl    $.LC0, %esi
        movl    $_ZSt4cout, %edi
        call    _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
        movl    $_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_, %esi
        movq    %rax, %rdi


3 汇编


vim hello.o


4 链接


三、多文件编译链接


1 编写add.h add.cpp main.cpp代码


add.h 头文件


#ifndef _ADD_H
#define _ADD_H
extern int add(int a,int b);
//extern 表示函数实现在另一个文件中
#endif


add.cpp 函数实现


int add(int a,int b)
{
  return (a+b);
}


main.cpp main函数


#include<iostream>
#include"add.h"


using namespace std;


int main()
{
  int a = 1,b = 2;
  int c = add(a,b);
  cout << a << " + " << b << " = " << c << endl;
  return 0;
}


2 编译运行


linuxidc@shenyong-Opt790:~/work/cpp$ g++ add.h add.cpp main.cpp -o main
linuxidc@shenyong-Opt790:~/work/cpp$ ls
add.cpp  add.h  main  main.cpp
linuxidc@shenyong-Opt790:~/work/cpp$ ./main
1 + 2 = 3


四、动态库与静态库


静态库              .a (linux)      .lib (windows)
动态库              .so (linux)  .dll (windows)
gcc时,用-I和-L分别制定库名和库路径


1 静态库的创建与使用


 
  1 创建add.c和add.h,其中main函数中用到了add这个函数,如果直接运行会报错说找不到add这个函数。
  2 先add.c编译成二进制文件add.o
  g++ -c add.c -o add.o
  3 再用ar这个工具将add.o做成静态库 
  ar -r libadd.a add.o
  4 这样就可以调用了,即在编译的时候加上库的名字,路径并申明为静态库-static等参数即可。
  g++ mian.c -ladd -L/home/linuxidc/work/cpp -static -o main
  5 注意要其他地方也要用的话要把add.h也拷贝过去才能用
 


linuxidc@linuxidc:~/work/cpp$ ls
add.c  add.h  add.o  a.out  mian.c
linuxidc@linuxidc:~/work/cpp$ rm a.out
linuxi
编程开发网

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇如何使用一个尾指针来达到单链表.. 下一篇关于sizeof,对空指针sizeof(*p)..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(214) }