在 CentOS 上链接 C++ 静态库(.a 文件),通常分为“生成静态库”和“使用静态库”两部分。下面一步一步说明。
hello.cpp
#include <iostream>
void sayHello() {
std::cout << "Hello from static library!" << std::endl;
}
main.cpp
void sayHello();
int main() {
sayHello();
return 0;
}
g++ -c hello.cpp -o hello.o
ar rcs libhello.a hello.o
✅ 生成的 libhello.a 就是静态库
g++ main.cpp libhello.a -o main
g++ main.cpp -L. -lhello -o main
说明:
-L.:指定库搜索路径(当前目录)-lhello:链接 libhello.a./main
输出:
Hello from static library!
❌ 错误:
g++ -lhello main.cpp
✅ 正确:
g++ main.cpp -lhello
ar tv libhello.a
ldd main
如果是静态库,通常不会出现 libhello.so
g++ main.cpp -L. -lhello -static -o main
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** 报错,可以把具体错误信息发出来,我帮你分析。