zoukankan      html  css  js  c++  java
  • gcc/g++多文件编译

    初级版

    目录如下:

     

     header.h

    #include <iostream>
    #include <stdio.h>
    
    void one();
    void two();

    main.cpp

    #include "header.h"
    
    int main(){
        printf("hello
    ");
        one();
        two();
    
        return 0;
    }

    funcA.cpp

    #include "header.h"
    
    void one(){
        printf("im one from A 
    ");
    }

    funcB.cpp

    #include "header.h"
    
    void two(){
        printf("im two from B 
    ");
    }

    测试1.1:

    只编译main.cpp

    测试1.2:

    编译所有cpp

    测试1.3:

    编译为静态库

     说明:

    g++ -c *.cpp 把cpp文件编译为.o的对象

    ar 命令把.o的对象打包为libfunc.a的静态库

    最后编译的时候指定该静态库

    g++ main.cpp -o main libfunc.a

    测试1.4

    编译为动态库

     说明:

    -shared参数把多个cpp文件编译为so动态库

    编译main的时候指定该库就可以了。

    注意:

    如果funcA.cpp需要用funcB.cpp里面的函数或者定义,则需要在funcA.cpp里面引用funcB.h,如果只是在main.cpp里面引用funcB.h是没用的。

    因为g++的编译是每个cpp编译为一个个独立的object,最后再链接起来。

    比如我在main.cpp里面把所有的头文件都引入进来,后面cpp用的某个头文件时,如果不引用,也是会编译不过的。

    进阶版:

    如果有多目录g++ *.cpp的方式就不行了,需要指定其他目录下的所有cpp,这个比较麻烦,所以有其他路子

    测试2.1

    编译所有文件

     说明:

    文件少的时候也能凑合,编译静态和动态库也同理。

    测试2.2

    makefile

    @todo

  • 相关阅读:
    PetaLinux 生成 Zynq 操作系统
    单片机、微控制器和微处理器有什么区别
    嵌入式基础概念系列(1) —— GPIO
    学中杂记
    Spring学习笔记
    jdbc一点小笔记
    JSP学习
    Servlet学习的一些笔记
    接触Struts2的ModelDriven<>接口
    android-dialog的位置
  • 原文地址:https://www.cnblogs.com/alazalazalaz/p/13822162.html
Copyright © 2011-2022 走看看