• Linux C++静态库动态库以及链接方式介绍


    Linux系统中,C/C++库分为静态库和动态库两种类型。下面是它们的基础介绍:

    1. 静态库.a文件):静态库是一种归档文件,其中包含了一堆可重用的目标文件,这些目标文件通常是C/C++函数的实现。当静态库被链接到程序中时,需要的目标文件会被复制并包含在最终的可执行文件中。静态库的优点是程序运行时不需要额外的依赖,但是会导致生成的可执行文件变大。

    2. 动态库.so文件):动态库在程序运行时才被加载到内存,一个动态库可以被多个正在运行的程序共享,这样可以节省内存。如果动态库被修改,所有使用该库的程序都将受益,无需重新编译或链接。但是,使用动态库需要保证运行环境中有对应的库文件。

    以下是使用CMake来创建和链接静态库和动态库的基本示例。

    我们首先创建一个名为mylib的库,它有一个源文件mylib.cpp

    // mylib.cpp
    #include "mylib.h"
    
    int add(int a, int b) {
        return a + b;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    还有一个头文件mylib.h

    // mylib.h
    #ifndef MYLIB_H
    #define MYLIB_H
    
    int add(int a, int b);
    
    #endif
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    然后,我们创建一个主程序main.cpp来使用这个库。

    // main.cpp
    #include "mylib.h"
    #include 
    
    int main() {
        std::cout << "2 + 3 = " << add(2, 3) << std::endl;
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    接下来,我们创建CMakeLists.txt文件来编译和链接这些程序。

    • 静态库

      cmake_minimum_required(VERSION 3.10)
      project(MyApp)
      
      add_library(mylib STATIC mylib.cpp)
      
      add_executable(main main.cpp)
      target_link_libraries(main mylib)
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    • 动态库

      cmake_minimum_required(VERSION 3.10)
      project(MyApp)
      
      add_library(mylib SHARED mylib.cpp)
      
      add_executable(main main.cpp)
      target_link_libraries(main mylib)
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

    在以上的CMakeLists.txt文件中,add_library命令用于创建库,add_executable命令用于创建可执行程序,target_link_libraries命令用于链接库到可执行程序。STATICSHARED关键词用于指定创建静态库或动态库。

    最后,我们在构建目录下运行以下命令来生成和编译项目:

    cmake ..
    make
    
    • 1
    • 2

    以上就是在Linux系统中使用CMake创建和链接静态库和动态库的基本方法。

  • 相关阅读:
    瞬态抑制二极管TVS的工作原理?|深圳比创达电子EMC(下)
    Arcgis横向图例设置
    c语言实现数据结构---堆
    【JavaScript-28】js的例子点名器,注释咔咔全
    微信小程序转为App并上架应用市场
    QT设置闹钟超时播报
    vr虚拟现实技术融入司法办案实操培训中的优势
    Ubuntu16.04 设置静态 ip
    SpringBoot SpringBoot 原理篇 3 核心原理 3.2 启动流程【1】
    FITC荧光标记脂多糖 FITC-LPS;CY3、CY5、CY7标记芽霉菌糖/昆布多糖/海洋硫酸多糖/聚二糖/棉籽糖定制合成
  • 原文地址:https://blog.csdn.net/yao_hou/article/details/134234718