概念
graph LR;
X(格式)
X --> A(linux) --> A1(".o/.a")
X --> B(windows) --> B1(".obj/.lib")
开发
编译
// 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)
使用
链接
// main.cpp
#include "static_api.hpp"
int main(void) {
Hello();
std::cout << Add(0xA, 0xB) << std::endl;
return 0;
}
命令行