在 Linux 下用 C++ 链接库,通常分两种情况:静态库(.a) 和 动态库(.so)。下面从原理到常见做法给你一个清晰说明。
libxxx.alibxxx.so-lxxx(去掉 lib 和扩展名)例如:
libmylib.a -> -lmylib
libmylib.so -> -lmylib
g++ main.cpp -o main -lmylib
如果库不在系统默认路径(/usr/lib, /lib):
g++ main.cpp -o main \
-L/path/to/lib \
-lmylib
-L:指定库路径
-l:指定库名
g++ main.cpp -o main \
-I/path/to/include \
-L/path/to/lib \
-lmylib
g++ main.cpp -o main -L. -static -lmylib
或:
g++ main.cpp libmylib.a -o main
g++ main.cpp -o main -L. -lmylib
运行时要能找到 .so:
export LD_LIBRARY_PATH=/path/to/lib:$LD_LIBRARY_PATH
./main
或:
sudo cp libmylib.so /usr/lib/
sudo ldconfig
ldd main
nm libmylib.a
nm -D libmylib.so
cmake_minimum_required(VERSION 3.10)
project(demo)
find_package(Threads REQUIRED)
include_directories(/path/to/include)
link_directories(/path/to/lib)
add_executable(main main.cpp)
target_link_libraries(main mylib)
或现代写法(推荐):
target_include_directories(main PRIVATE /path/to/include)
target_link_directories(main PRIVATE /path/to/lib)
target_link_libraries(main PRIVATE mylib)
cannot find -lmylib
✅ 检查:
libmylib.so / .a-L 路径是否正确-lmyliberror while loading shared libraries
✅ 解决:
export LD_LIBRARY_PATH=路径:$LD_LIBRARY_PATH
或安装到系统目录 + ldconfig
Linux C++ 链接库 =
-I找头文件 +-L找库 +-l链接库
如果你有:
可以告诉我,我给你针对性配置示例。