温馨提示×

ubuntu c++怎么链接静态库

小樊
36
2026-10-05 08:33:08
栏目: 编程语言

在 Ubuntu 下用 C++ 链接静态库(.a 文件),一般流程是:编译源文件 → 生成静态库 → 链接静态库。下面从基础到常见用法一步步说明。


一、什么是静态库

静态库在 Linux 下通常是:

libxxx.a

链接时,库代码会被直接拷贝进可执行文件。


二、示例:自己做一个静态库

1️⃣ 准备源文件

// mathadd.cpp
int add(int a, int b) {
    return a + b;
}
// mathadd.h
#pragma once
int add(int a, int b);

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

g++ -c mathadd.cpp -o mathadd.o

3️⃣ 打包成静态库

ar rcs libmathadd.a mathadd.o

✅ 生成:libmathadd.a


4️⃣ 使用静态库

// main.cpp
#include "mathadd.h"
#include <iostream>

int main() {
    std::cout << add(2, 3) << std::endl;
}

编译并链接:

g++ main.cpp -L. -lmathadd -o main

解释:

  • -L.:在当前目录找库
  • -lmathadd:链接 libmathadd.a

三、指定静态库路径(推荐写法)

如果库不在当前目录:

g++ main.cpp -L/path/to/lib -lmathadd -o main

四、强制使用静态库(和系统库混合时)

有时系统有同名 .so,你想强制静态链接:

g++ main.cpp -L. -l:libmathadd.a -o main

或:

g++ main.cpp /path/libmathadd.a -o main

五、链接顺序问题(很重要)

⚠️ 库要放在源文件 / 目标文件后面

✅ 正确:

g++ main.cpp -lmathadd

❌ 错误:

g++ -lmathadd main.cpp

六、查看静态库内容

ar t libmathadd.a

七、常见错误

错误 原因
undefined reference 没加 -lxxx 或顺序错
cannot find -lxxx 没加 -L 或名字不对
链接了 .so 而不是 .a 同名动态库优先

八、CMake 中链接静态库(补充)

add_library(mathadd STATIC mathadd.cpp)
target_link_libraries(main mathadd)

如果你有:

  • 第三方库(如 OpenCV / Boost)
  • 静态 + 动态混合
  • 交叉编译

可以继续问,我可以给你具体命令。

0 踩