C/C++ 静态库

 

概念

graph LR;
    X(格式)
    X --> A(linux) --> A1(".o/.a")
    X --> B(windows) --> B1(".obj/.lib")

开发

编译

  • 示例, 生成static_api静态库
// static_api.h
#ifndef __STATIC_API_HPP__
#define __STATIC_API_HPP__
#include <iostream>

extern "C" int Add(int x, int y);
extern "C"void Hello();

#endif
// static_api.cpp
#include "static_api.hpp"

int Add(int x, int y) {
    return x + y;
}
void Hello() {
    std::cout << "Hello World" << std::endl;
}

命令行

# -c 生成目标文件
clang++ 源文件 -c -o 目标文件

# 生成静态库
ar rcv 库文件 目标文件
graph LR;
    X(参数)
    X-->A(ar)-->A1(创建、修改提取静态库)
    X-->B(rcv)
        B-->B1("r")-->B11(将目标文件插入库中, 若库已存在则追加)
        B-->B2("c") -->B21(创建新库, 若库已存在则覆盖)
        B -->B3("v") -->B31(详细输出添加到库中文件名)

CMake

# CMakeLists.txt
cmake_minimum_required(VERSION 3.16)
project(static_api)

add_library(${PROJECT_NAME} STATIC "")
target_sources(${PROJECT_NAME} PUBLIC ${CMAKE_SOURCE_DIR}/static_api.cpp)

使用

链接

  • 示例, 使用libstatic_api.a
// main.cpp
#include "static_api.hpp"

int main(void) {
    Hello();
    std::cout << Add(0xA, 0xB) << std::endl;
    return 0;
}

命令行

clang++ 源文件 库 -o 可执行文件