ubuntu中库文件安装的位置以及头文件的位置

news/2024/9/29 5:58:57 标签: ubuntu, linux

在 Ubuntu 系统中,C++ 的库文件通常安装在 /usr/lib/usr/local/lib 目录下。其中:

  • /usr/lib:主要存放通过包管理器(如 APT)安装的库文件。
  • /usr/local/lib:通常用于存放手动编译安装或第三方软件的库文件。

关于 .a 后缀的文件

  • .a 文件是静态库(Archive):静态库是在编译时将库的代码直接链接到可执行文件中。这意味着生成的可执行文件包含了库的所有必要代码,运行时不再需要外部库。
  • .so 文件是共享库(Shared Object):共享库是在运行时动态加载的,这使得可执行文件可以更小,并且多个程序可以共享同一个库,节省内存。

为什么会有 .a 后缀的文件

  • 编译选项:当编译库时,如果选择生成静态库,就会产生 .a 文件。例如,使用 ar 工具将目标文件(.o)打包成 .a 文件。
  • 安装方式:如果您从源代码编译安装库,默认可能会生成静态库并安装到 /usr/local/lib。这取决于库的构建配置(如使用 configureCMake 等工具时的选项)。

如何处理静态库和共享库

  • 使用静态库

    • 优点:可执行文件独立性强,部署时不需要依赖外部库版本。
    • 缺点:可执行文件体积较大,无法利用共享库的内存优势。
  • 使用共享库

    • 优点:节省磁盘和内存空间,易于更新库版本而不需要重新编译应用程序。
    • 缺点:运行时需要确保所需的共享库存在,并且版本兼容。

总结

  • 库文件位置/usr/lib/usr/local/lib 都是常见的库文件安装目录。
  • 文件后缀.a 表示静态库,.so 表示共享库。
  • 选择合适的库类型:根据您的需求选择使用静态库或共享库,并在编译时设置正确的选项。

如果您希望使用共享库,可以尝试重新编译库,生成 .so 文件,并将其安装到适当的目录。

在 Ubuntu 系统中,库文件的头文件通常存放在以下目录:

  1. /usr/include

    • 描述:这是系统级别的头文件目录。通过包管理器(如 APT)安装的库,其头文件通常会被放置在此目录下。
    • 示例:安装 libssl-dev 包后,OpenSSL 的头文件会出现在 /usr/include/openssl 目录中。
  2. /usr/local/include

    • 描述:这是用于手动编译和安装的库的头文件目录。当您从源代码编译并安装库时,默认情况下头文件可能会被安装到此目录下。
    • 注意:需要确保在编译应用程序时,编译器可以找到这些头文件。
  3. 自定义目录

    • 描述:如果您在安装库时指定了自定义的安装前缀(例如 /opt/mylib),那么头文件可能会被安装到相应的 include 目录中(如 /opt/mylib/include)。
    • 处理方法:在编译程序时,需要使用编译器选项 -I/path/to/include 来指定头文件路径。

编译器如何找到头文件

  • 默认搜索路径:编译器(如 gccg++)默认会在 /usr/include/usr/local/include 中搜索头文件。

  • 自定义搜索路径:如果头文件在非标准目录,需要在编译时使用 -I 选项指定,例如:

    g++ -I/path/to/custom/include -L/path/to/lib -o myapp myapp.cpp -llibname
    

示例

  • 通过包管理器安装库

    sudo apt-get install libcurl4-openssl-dev
    

    安装后,libcurl 的头文件会位于 /usr/include/curl

  • 手动编译安装库

    ./configure
    make
    sudo make install
    

    如果没有指定前缀,头文件可能会安装到 /usr/local/include

总结

  • 通过包管理器安装的库:头文件通常位于 /usr/include
  • 手动安装的库:头文件可能位于 /usr/local/include 或其他指定目录。
  • 确保编译器找到头文件:如果头文件不在标准目录,需要在编译时明确指定头文件路径。

http://www.niftyadmin.cn/n/5682511.html

相关文章

mariadb实现冷备份与恢复操作案例(物理冷备份,周期性备份)详解

文章目录 前置环境一、物理冷备份1.备份2.恢复检查结果 补充: 周期性恢复操作 前置环境 主机ipmariadb1192.168.10.11mariadb2192.168.10.12 mairadb1操作 安装mariadb yum -y install mariadb-server启动mariadb systemctl start mariadb这里只是演示备份与恢复…

【接口测试】测试试题

需要技能竞赛软件测试资料的同学们可s聊我,详细了解 一、接口测试 (一)概述 按照软件接口测试文档要求,执行接口测试;使用接口测试工具PostMan,编写脚本、配置参数、执行接口,对设计过程及测…

Linux云计算 |【第四阶段】RDBMS1-DAY2

主要内容: 常用函数(函数分类1:单行、分组;函数分类2:字符、数学、日期、流程控制)、分组查询group by、连接查询 一、常用函数 1. 按使用方式分类 ① 单行函数 单行函数(Scalar Functions&…

如何初步部署自己的服务器,达到生信分析的及格线

1,首先是确保自己能够登录: 内网lab 公网ip ssh 此处可以参考我的博客:https://blog.csdn.net/weixin_62528784/article/details/142345268?spm1001.2014.3001.5501 2,现在自己能够通过各种手段(包括校园网vpn&…

python 02 List

Python 1-14 列表 第一课 1437. 是否所有 1 都至少相隔 k 个元素 class Solution:def kLengthApart(self, nums: List[int], k: int) -> bool:cnt k # 处理第一个 1for i, x in enumerate(nums):if x 1:if cnt < k: return Falsecnt 0 # 遇到 1 从新记数else: cnt …

WEB服务器——Tomcat

服务器是可以使用java完成编写&#xff0c;是可以接受页面发送的请求和响应数据给前端浏览器的&#xff0c;而在开发中真正用到的Web服务器&#xff0c;我们不会自己写的&#xff0c;都是使用目前比较流行的web服务器。 如&#xff1a;Tomcat 1. 简介 Tomcat 是一个开源的轻量…

看480p、720p、1080p、2k、4k、视频一般需要多大带宽呢?

看视频都喜欢看高清&#xff0c;那么一般来说看电影不卡顿需要多大带宽呢&#xff1f; 以4K为例&#xff0c;这里引用一位网友的回答&#xff1a;“视频分辨率4092*2160&#xff0c;每个像素用红蓝绿三个256色(8bit)的数据表示&#xff0c;视频帧数为60fps&#xff0c;那么一秒…

OpenSource - 开源日历库tui.calendar

文章目录 强大且灵活的开源日历库推荐&#xff1a;tui.calendar多视图支持&#xff1a; Monthly, Weekly, Daily and Various View Types支持拖拽: Dragging and Resizing a Schedule事件管理支持多语言集成与扩展高度定制化其他功能地址总结 强大且灵活的开源日历库推荐&#…