在 Ubuntu 下用 C++ 链接库文件,通常分 系统库、第三方库、自己写的库 几种情况。下面按常见场景说明。
.a.sog++ 找头文件g++ 找库文件例如使用 pthread、math
g++ main.cpp -o main -lpthread -lm
说明:
-lxxx 表示链接 libxxx.so 或 libxxx.a/usr/lib、/lib假设:
./lib/libfoo.so
./include/foo.h
g++ main.cpp -o main \
-I./include \
-L./lib \
-lfoo
参数说明:
-I :头文件路径-L :库文件路径-lfoo :链接 libfoo.sog++ main.cpp -L./lib -lfoo -static
或明确指定:
g++ main.cpp ./lib/libfoo.a -o main
运行时需要能找到 .so:
export LD_LIBRARY_PATH=./lib:$LD_LIBRARY_PATH
./main
或安装到系统:
sudo cp libfoo.so /usr/lib/
sudo ldconfig
cmake_minimum_required(VERSION 3.10)
project(demo)
find_package(Threads REQUIRED)
include_directories(${CMAKE_SOURCE_DIR}/include)
link_directories(${CMAKE_SOURCE_DIR}/lib)
add_executable(main main.cpp)
target_link_libraries(main foo pthread)
构建:
mkdir build && cd build
cmake ..
make
ldd main
查看依赖的动态库。
❌ cannot find -lfoo
-L 路径libfoo.so❌ undefined reference
-lxxx❌ 运行时 cannot open shared object
LD_LIBRARY_PATHsudo ldconfig如果你有 具体库名 / 编译报错 / CMake 或 Makefile 场景,可以贴出来,我可以直接帮你改。