在 Linux 下用 C++ 编译/运行时“找不到库”是非常常见的问题,通常分为编译期找不到和运行期找不到两类。下面系统地帮你梳理原因和排查方法。
fatal error: xxx.h: No such file or directory
或
undefined reference to `xxx'
error while loading shared libraries: libxxx.so: cannot open shared object file
.h / .hpp)原因:
/usr/include)解决:
g++ main.cpp -I/path/to/include
查看默认搜索路径:
echo | g++ -E -Wp,-v -
.so / .a)原因:
/usr/lib、/usr/local/lib解决:
g++ main.cpp -L/path/to/lib -lxxx
示例:
g++ main.cpp -L/usr/local/lib -lopencv_core
⚠️ 注意:
-lxxx 对应 libxxx.soLinux 运行时只搜索:
/lib/usr/lib/etc/ld.so.conf 中配置的路径LD_LIBRARY_PATHldd ./your_program
export LD_LIBRARY_PATH=/path/to/lib:$LD_LIBRARY_PATH
./your_program
sudo echo "/path/to/lib" >> /etc/ld.so.conf
sudo ldconfig
可能原因:
# Ubuntu / Debian
sudo apt install libxxx-dev
# CentOS
sudo yum install xxx-devel
file libxxx.so
file your_program
不匹配会导致链接或加载失败。
libxxx.a # 静态
libxxx.so # 动态
强制静态:
g++ main.cpp -L. -lxxx -static
find_library(XXX_LIB xxx PATHS /path/to/lib)
target_link_libraries(app ${XXX_LIB})
头文件:
include_directories(/path/to/include)
-I-L-lldd 检查依赖ldconfig 刷新缓存-dev / -devel 包你可以贴出:
ldd 输出我可以精准定位是哪一步出问题。