温馨提示×

Ubuntu C++库文件哪里找

小樊
44
2025-12-17 04:02:43
栏目: 编程语言

Ubuntu 中 C++ 库文件与头文件的常见位置

  • 头文件默认搜索路径(编译期)

    • /usr/include/c++/<版本>/(如:/usr/include/c++/11
    • /usr/include/x86_64-linux-gnu/c++/<版本>/(多架构系统)
    • /usr/include/usr/local/include
    • 使用命令查看完整搜索路径:g++ -v -x c++ -E /dev/null(查看 “#include <…> search starts here” 段)。
  • 库文件默认搜索与缓存路径(链接期与运行期)

    • 系统库目录:/lib/usr/lib/usr/local/lib
    • 多架构目录:/lib64/usr/lib64(视架构而定)
    • 用户级目录:~/.local/lib
    • 配置与缓存:/etc/ld.so.conf/etc/ld.so.conf.d/,缓存文件 /etc/ld.so.cache(用 sudo ldconfig 更新)
    • 运行时动态库查找还会参考环境变量(见下文)。
  • 典型安装布局(按来源区分)

    • APT 安装的开发包(库名-dev):头文件在 /usr/include,库文件在 /usr/lib/x86_64-linux-gnu/(或 /usr/lib)。
    • 源码编译安装(默认 prefix=/usr/local):头文件在 /usr/local/include,库文件在 /usr/local/lib

如何快速定位某个库

  • 查可执行文件依赖的动态库:ldd ./your_app
  • 查系统库缓存中是否存在某库:ldconfig -p | grep libname
  • 查看可执行文件是否内嵌了库搜索路径(RPATH/RUNPATH):objdump -p ./your_app | grep -E 'RPATH|RUNPATH'
  • 查看编译器默认头文件与库路径:g++ -v -x c++ -E /dev/null
  • 定位头文件:find /usr/include /usr/local/include -name "header.h" 或使用 whereis header.h

找不到库时的解决办法

  • 编译期找不到头文件或库
    • -I<头文件路径> 指定头文件目录,用 -L<库目录> 指定库目录,用 -l<库名> 指定库(例如:g++ main.cpp -I/my/include -L/my/lib -lmylib)。
  • 运行期找不到 .so
    • 将库目录加入可执行文件的 RPATH/RUNPATHg++ main.cpp -L/my/lib -lmylib -Wl,-rpath,/my/lib
    • 临时使用环境变量:LD_LIBRARY_PATH=/my/lib:$LD_LIBRARY_PATH ./your_app
    • 系统级配置:在 /etc/ld.so.conf.d/ 新建一个 .conf 文件写入库目录,执行 sudo ldconfig 更新缓存。
  • 版本与多架构注意
    • 确认库与程序架构一致(如 x86_64 vs ARM),并使用与库版本匹配的 -l 名称。

安装与获取第三方 C++ 库的方式

  • APT 包管理器(优先推荐)
    • 安装开发包:sudo apt install libname-dev(例如:sudo apt install libeigen3-dev libann-dev)。
  • 源码编译安装
    • 常见流程:mkdir build && cd build && ../configure --prefix=/usr/local && make && sudo make install
    • 或 CMake:cmake .. && make && sudo make install(库与头文件分别进入 /usr/local/lib/usr/local/include)。
  • 其他包管理器与方式
    • vcpkgConan 等跨平台 C++ 包管理器;或下载 .deb 包用 sudo dpkg -i xxx.deb 安装。

0