在 Linux 下用 C++ 链接静态库(.a 文件),通常分三步:编译目标文件 → 生成静态库 → 链接静态库。下面按常见用法说明。
g++ -c math.cpp -o math.o
ar 生成静态库ar rcs libmymath.a math.o
命名规范:
- 库名:
libxxx.a- 链接时用:
-lxxx
.
├── main.cpp
├── libmymath.a
└── mymath.h
g++ main.cpp -L. -lmymath -o main
说明:
-L.:指定库搜索路径(当前目录)-lmymath:链接 libmymath.ag++ main.cpp libmymath.a -o main
✅ 不需要 -L 和 -l
如果系统同时存在 .a 和 .so,可强制静态:
g++ main.cpp -static -lmymath -o main
或只静态某个库:
g++ main.cpp -Wl,-Bstatic -lmymath -Wl,-Bdynamic -o main
add_executable(main main.cpp)
target_link_libraries(main ${CMAKE_SOURCE_DIR}/libmymath.a)
link_directories(${CMAKE_SOURCE_DIR})
add_executable(main main.cpp)
target_link_libraries(main mymath)
❌ 库顺序放错
g++ -lmymath main.cpp # 错误
✅ 正确
g++ main.cpp -lmymath
❌ 忘记 -c 导致直接生成可执行
❌ 库名不是 libxxx.a
如果你有 具体编译命令 / CMake / Makefile / 库来源(如第三方库),可以贴出来,我帮你具体改。