温馨提示×

C++在CentOS如何配置静态库

小樊
41
2026-08-04 02:00:49
栏目: 编程语言

CentOS 上配置和使用 C++ 静态库(.a 文件),一般分为 三步
1️⃣ 编写源码并生成静态库
2️⃣ 配置编译环境
3️⃣ 链接静态库进行编译

下面用 完整示例 说明。


一、准备示例文件

假设目录结构如下:

project/
├── include/
│   └── mylib.h
├── src/
│   └── mylib.cpp
├── main.cpp

1️⃣ 头文件 include/mylib.h

#ifndef MYLIB_H
#define MYLIB_H

void hello();

#endif

2️⃣ 源文件 src/mylib.cpp

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

void hello() {
    std::cout << "Hello from static library!" << std::endl;
}

3️⃣ 主程序 main.cpp

#include "mylib.h"

int main() {
    hello();
    return 0;
}

二、生成静态库(.a 文件)

1️⃣ 安装编译工具(如果未安装)

sudo yum install -y gcc gcc-c++ make

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

g++ -c src/mylib.cpp -Iinclude -o mylib.o

3️⃣ 打包为静态库

ar rcs libmylib.a mylib.o

✅ 生成:

libmylib.a

三、使用静态库编译程序

方式一:直接指定库文件和路径(推荐)

g++ main.cpp -Iinclude -L. -lmylib -o main

参数说明:

参数 含义
-Iinclude 头文件搜索路径
-L. 库文件搜索路径(当前目录)
-lmylib 链接 libmylib.a
-o main 输出可执行文件

运行:

./main

输出:

Hello from static library!

四、静态库 vs 动态库(重要区别)

类型 扩展名 是否嵌入可执行文件
静态库 .a ✅ 是
动态库 .so ❌ 否

查看是否成功静态链接:

ldd main

✅ 如果没有 libmylib.so,说明是静态链接。


五、常见问题与解决方法

❌ 1. undefined reference to xxx

原因:

  • 库顺序错误
  • 没加 -lmylib
  • 库路径不对

✅ 正确顺序(源文件在前,库在后):

g++ main.cpp -L. -lmylib

❌ 2. ar 命令不存在

sudo yum install -y binutils

❌ 3. CentOS 7 默认 gcc 版本过低

查看版本:

g++ --version

如需升级(示例):

sudo yum install -y centos-release-scl
sudo yum install -y devtoolset-11
scl enable devtoolset-11 bash

六、Makefile 示例(进阶)

CXX = g++
CXXFLAGS = -Iinclude

all: main

libmylib.a: src/mylib.cpp
	$(CXX) -c $< -o mylib.o
	ar rcs $@ mylib.o

main: main.cpp libmylib.a
	$(CXX) main.cpp -Iinclude -L. -lmylib -o $@

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

使用:

make
./main

七、总结

✅ 在 CentOS 配置 C++ 静态库流程:

  1. 编译 .cpp.o
  2. 使用 ar 生成 .a
  3. 编译主程序时:
    g++ main.cpp -Iinclude -L. -lmylib
    

如果你需要 CMake 配置静态库多目录工程、或 与动态库混合使用,可以继续问我。

0