温馨提示×

Linux C++配置静态库如何做

小樊
43
2026-09-11 00:47:34
栏目: 编程语言

Linux 下用 C++ 使用静态库(.a 文件),一般分三步:生成静态库 → 编译目标文件 → 链接静态库。下面给你一个完整、实用的做法。


一、准备源码

假设有两个文件:

math_util.h

#ifndef MATH_UTIL_H
#define MATH_UTIL_H

int add(int a, int b);

#endif

math_util.cpp

#include "math_util.h"

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

main.cpp

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

int main() {
    std::cout << add(1, 2) << std::endl;
    return 0;
}

二、生成静态库(.a)

1️⃣ 编译为目标文件(.o)

g++ -c math_util.cpp -o math_util.o

2️⃣ 用 ar 打包成静态库

ar rcs libmathutil.a math_util.o

✅ 生成:

libmathutil.a

命名规范:libxxx.a


三、使用静态库编译程序

方法一:直接指定库文件

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

运行:

./main

方法二:使用 -L-l(推荐)

libmathutil.a 放到 lib/ 目录:

g++ main.cpp -L./lib -lmathutil -o main

说明:

  • -L./lib:库搜索路径
  • -lmathutil:链接 libmathutil.a

四、常见 Makefile 示例(可选)

CXX = g++
CXXFLAGS = -Wall -O2

libmathutil.a: math_util.o
	ar rcs libmathutil.a math_util.o

math_util.o: math_util.cpp math_util.h
	$(CXX) -c math_util.cpp

main: main.cpp libmathutil.a
	$(CXX) main.cpp -L. -lmathutil -o main

clean:
	rm -f *.o *.a main

使用:

make
./main

五、常见问题

1️⃣ 链接顺序问题

Linux 下 库要放在源文件后面

g++ main.cpp -lmathutil   # ❌ 可能报错
g++ main.cpp -L. -lmathutil # ✅

2️⃣ 静态库 vs 动态库

  • 静态库:.a,编译时拷贝进程序
  • 动态库:.so,运行时加载

六、验证是否是静态链接

ldd main

如果 没有显示 libmathutil,说明是静态链接成功。


如果你是用 CMake / vcpkg / 第三方库(如 OpenCV、Boost)交叉编译,可以告诉我具体场景,我可以给你对应配置。

0