温馨提示×

centos怎么链接c++静态库

小樊
50
2026-09-09 00:45:36
栏目: 编程语言

在 CentOS 上链接 C++ 静态库(.a 文件),通常分为“生成静态库”和“使用静态库”两部分。下面一步一步说明。


一、准备示例代码

1. 源文件

hello.cpp

#include <iostream>

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

main.cpp

void sayHello();

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

二、生成静态库(.a)

1. 编译为目标文件

g++ -c hello.cpp -o hello.o

2. 使用 ar 打包成静态库

ar rcs libhello.a hello.o

✅ 生成的 libhello.a 就是静态库


三、链接静态库(重点)

方式一:直接指定 .a 文件

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

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

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

说明:

  • -L.:指定库搜索路径(当前目录)
  • -lhello:链接 libhello.a

四、运行程序

./main

输出:

Hello from static library!

五、常见问题 & 注意事项

1. 静态库必须放在源文件后面

❌ 错误:

g++ -lhello main.cpp

✅ 正确:

g++ main.cpp -lhello

2. 查看静态库内容

ar tv libhello.a

3. 确认是静态链接

ldd main

如果是静态库,通常不会出现 libhello.so


4. 强制完全静态链接(不推荐一般情况)

g++ main.cpp -L. -lhello -static -o main

六、Makefile 示例(可选)

all:
	g++ -c hello.cpp
	ar rcs libhello.a hello.o
	g++ main.cpp -L. -lhello -o main

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

如果你有 第三方静态库(如 OpenCV、Boost、protobuf) 或遇到 ** undefined reference** 报错,可以把具体错误信息发出来,我帮你分析。

0