在 CentOS 下用 C++ 链接库文件(静态库 .a 或动态库 .so),通常有以下几种常见方式。下面从编译命令、环境变量、CMake三个层面说明。
g++ main.cpp -o main -lpthread
-l 后面是库名(去掉 lib 和扩展名)libpthread.so → -lpthread假设:
libmylib.so
/usr/local/lib/
g++ main.cpp -o main -L/usr/local/lib -lmylib
-L:库文件所在目录-l:库名g++ main.cpp -o main /path/libmylib.a
或
g++ main.cpp -o main -L/path -lmylib -static
编译通过但运行报错:
error while loading shared libraries: libmylib.so
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
./main
sudo vim /etc/ld.so.conf.d/mylib.conf
写入:
/usr/local/lib
然后执行:
sudo ldconfig
cmake_minimum_required(VERSION 3.10)
project(demo)
add_executable(demo main.cpp)
# 指定库路径
link_directories(/usr/local/lib)
# 链接库
target_link_libraries(demo mylib)
或显式写全路径:
target_link_libraries(demo /usr/local/lib/libmylib.so)
ldd ./main
查看是否成功链接 .so
✅ 库名顺序有讲究(被依赖的库放后面)
✅ CentOS 默认 gcc 较老,注意 C++11/14/17 支持
✅ 动态库建议用 ldconfig,不要只靠环境变量
如果你有:
可以告诉我,我可以给你针对性命令。