Linux库文件使用与编译

linux一些库文件的交叉编译 参考出处:一步步教你交叉编译嵌入式linux GUI-directfb+gtk   一、注意点: 1、在./configure的--host的选项可以为arm-linux或arm-none-linux-gnueabi(编译工具cross-4.3.2,也是本次用的编译工具,在安装目录下的/bin文件夹里可以用ls -l看到编译工具除了arm-linux-gcc和arm-none-linux 阅读详情

介绍在Linux下使用静态库、共享库、动态库的方法。

Linux库文件

  • 静态库
    • 在Linux中,以.a为后缀,如libtest.a
    • 直接拷贝函数到二进制映像文件
    • 只需要运行二进制文件,可以直接运行
  • 共享库
    • 在Linux操作系统中,以libxxx.so.x.x为格式命名
    • 可执行文件在开始运行时将函数从共享库文件中读出,从而间接引用
    • 好处是,当函数接口没变,实现改变时,不需要再次编译
  • 动态库
    • 动态加载库在指定位置加载的函数库
    • 可以减少内存开销

库函数基本路径

  • /lib
    • 标准共享库和静态库
  • /usr/lib
    • 标准共享库和静态库
  • /usr/local/lib
    • 本地函数库

库文件搜索顺序

  1. 首先在“LD_LIBRARY_PATH”环境变量所设置的路径下查找(一般都没有给此环境变量赋值)
  2. 搜索动态装载器在/etc目录下的缓存文件/etc/ld.so.cache(此文件由命令ldconfig创建更新)。
  3. ldd命令–查看到某可执行程序共享库清单

创建静态库

  • libhello.c为要构建的库文件源文件,libhello.h为调用此库文件的头文件,usehello.c为测试程序。

    • 53922333150
  • 首先将所需要文件编译成目标文件

    • gcc -c libhello.c
      
  • 使用ar命令创建静态库

    • ar rc libhello.a libhello.o
      
  • 编译运行

    • gcc -o usehello_static usehello.c libhello.a
      
  • 53922368937

创建共享库

  • 首先将所需要的库编译成目标代码,这里生成与位置无关,可以在任何地址被链接和装载:

    • gcc -fPIC -Wall -g -c libhello.c
      
  • 使用-shared来创建共享库

    • gcc -g -shared -Wl,-soname,libhello.so.1.0 -o libhello.so.1.0 libhello.o
      
    • 这里的so.1.0表示对应的完整版本号,具体可参考这里。

  • 创建soname连接:

    • ln -sf libhelloso.1.0 libhello.so
      
    • 这里创建一个链接,只是为了方便以后版本更新时,只需要更改链接的路径,不改变编译代码

  • 编译并连接引用库文件

    • gcc -Wall -g -c usehello -o usehello.o
      gcc -g -o usehello_dynamic usehello.o -L ./ -lhello //连接引用库文件
      
    • 其中,-L表示搜索路径,./表示搜索当前路径

    • -lhello

      • 会自动在-l前变为lib,加上.so,变为libhello.so
  • 运行,需要添加当前目录pwd到环境变量中

    • LD_LIBRARY_PATH=$(pwd) ./usehello_dynamic 
      
  • 如果希望在使用连接器时不使用-Ldirectory标识就可以查找到该库,则可以采用以下方式之一:

    • 把此库拷贝到/usr/lib或者/lib文件夹中,或者在此两个文件夹任意一个中创建一个到该库的快捷方式,并命名为libname.so。
    • 如果库所在路径没有在/usr/lib和/lib文件夹下,需要将该路径添加到文件“/etc/ld.so.conf”中,每一行增加一个路径,完成以上设置后,然后运行ldconfig命令更新库信息。

动态库

  • 在Linux中,动态库的文件格式跟共享库没有区别,主要区别在于共享库是运行时加载。

  • 有专门的一组API用于完成打开动态库,查找符号,处理出错,关闭动态库等功能。

    • dlopen
    • dlerror
    • dlsym
    • dlclose
  • 使用示例

    • 53924215058

    ​

嵌入式Linux交叉编译库文件的必要步骤与编程实践 在嵌入式Linux开发中,交叉编译是一项重要的技术。嵌入式Linux设备通常有不同的架构和操作系统,因此我们需要获取特定于目标设备的交叉编译库文件。在嵌入式Linux开发中,交叉编译是一项关键技术,允许我们在主机上编译和构建适用于嵌入式设备的应用程序和库文件。交叉编译工具链由交叉编译器、链接器和库文件等组成,用于在主机上生成在嵌入式设备上运行的二进制文件。确保将上述命令中的路径和名称替换为实际的交叉编译工具链和库文件的路径和名称。请将上述命令中的路径和名称替换为实际的交叉编译工具链和库文件的路径和名称。 阅读详情

相关推荐

前端开发学习--登录和注册页面设计(html和css,可完成两个页面点击切换)

今天学习了登录和注册页面的设计,主要是HTML和CSS部分,注册和切换采用了Js代码进行,后面将通过js进行填写内容的验证,进而可通过JSP跳转到Servlet进行DAO数据的校验,这属于后端部分了。 总体设计思路:整个页面设计可以分为主体(content)、头部(content-header)、内容(content-body)三个部分组成,其中是主体是根部,包含了头部和内容,头部和内容各自下设两...

weixin_43691879的博客 1万+

Linux系统中lib64文件夹下包含:动态链接库,静态链接库,内核模块等

lib64 目录对系统稳定运行有重要作用。

qq_40280673的博客 2969

绿盾注册机 使用手册

在很多涉及工程设计的单位(如建筑、模具、电路、广告等),电子图纸的应用极为普遍,而电子图纸的丢失、被盗对企业利益的影响是显而易见的,如果被竞争对手获取,甚至可能造成致命的打击。因此,对于这类企业,电子图纸的保密显得至关重要。绿盾信息安全管理软件充分考虑了电子图纸的各种可能传播途径,制定了针对性的解决方案,从而保证了电子图纸的安全。 我们总结了电子图纸的各种传播途径以及相应的对策,有如下几点:

996

Windows和Linux环境下的静态库和动态库的使用详解

Windows环境下的静态库和动态库的导出和导入演示

adminstate的博客 5083

Delta并联机械手-Codesys实现以及正解逆解研究

由于Codesys的Robotics模块有Delta并联机械手的运动模型,因此借助Codesys的机械手运动模型,研究自己的正解逆解算法。

weixin_42386991的博客 5564

2019年7月28日解决战网BLZBNTBNA00000005BLZBNTBNA00000006BLZBNTBTS0000005DBLZBNTBTS0000004A 007D0 008A4 00840

Blizzard—Battle.net—2019年7月28解决战网BLZBNTBNA00000005BLZBNTBNA00000006BLZBNTBTS0000005DBLZBNTBTS0000004A 007D0 008A4 008402019年7月28日再次更新写在前面■■■ 排查网路问题 ■■■■■■ 排查电脑自身问题 ■■■■尝试重置internet设置■网络的设置和防火墙规则■如果还是不...

MCGC高质人类协作会-MCG贴吧 3万+

linux下的lib文件

<br />zz:http://ooplab.org/post/421.html<br /> <br />作者:曹江华 赛迪技术天地<br /> 随着Linux性能的不断提升和逐渐普及,会有越来越多的人在Linux下从事应用软件的开发。这里笔者根据从事Linux应用程序开发的经验,介绍Linux编程库使用的一些基础知识。<br /><br /> 库的定义和种类<br /><br /> 所谓编程库就是指始终可以被多个Linux软件项目重复使用的代码集。库是Linux软件开发所追求的目标 ,C语言就是一

孟源的专栏 3万+

微信小程序 - 真机调试调用接口报错{errno: 600001, errMsg: “request:fail -102:net::ERR_CONNECTION_REFUSED},真机运行测试请求异常

微信小程序,真机,调试测试,运行报错,API接口,服务器接口都报错了,小程序报错errno: 600001,小程序报错request:fail -102:net::ERR_CONNECTION_REFUSED,真实手机打开接口全都失效了,微信小程序真机测试失败,微信小程序{errno: 600001, errMsg: "request:fail -102:net::ERR_CONNECTION_REFUSED"},详细解决方法,https,服务器SSL证书,无法解决,服务器更换SSL证书,接口地址改了也不行

🏆 前端领域优质创作者 1万+

Linux中静态库和动态库的使用

库的概念 介绍: 库是一个二进制文件,包含的代码可被程序调用 标准C库、数学库、线程库… 库有源码,可下载后编译;也可以直接安装二进制包 位置一般放在:/lib /usr/lib 库的知识 库是事先编译好的,可以复用的代码 在os上运行的程序基本上都要使用库,使用库可以提高开发效率 window和Linux下库文件的格式不兼容 Linux下包含静态库和动态库 静态库的特点 编译时把静态库中相关代码复制到可执行文件中 程序中已包含代码,运行时不再需要静态库 程序运行时无需加载库,运行速度更快 占用更多磁盘和

weixin_58036810的博客 1273

【YOLO26创新改进】TGRS 2026 | Transformer变体改进篇 | 使用CGTA曲率引导令牌注意力,改善结构与纹理的整体协调,适合遥感小目标检测、旋转目标检测、实例分割任务

本文在YOLO26目标检测模型中引入CGTA曲率引导令牌注意力模块,依据曲率显著性与特征可靠性,从高分辨率特征图中筛选少量关键令牌,再让全部位置与这些代表性特征进行全局交互,从而以较低计算和显存开销建立远距离目标、背景及跨尺度结构之间的联系;该模块能够重点强化车辆、舰船、飞机、建筑等目标的边缘、转角和弯曲轮廓,改善小目标、密集目标及旋转目标的特征完整性与定位稳定性,并通过可靠性门控抑制噪声和伪边缘,通过标准注意力与曲率注意力融合避免平坦区域被过度增强。

AI魔改博士-中大博士 46

制作一款精美的 Qt IFW 安装程序

对于 Qt IFW 来说,默认的安装界面并不吸引人。倘若要制作一款精美的安装程序,这显然是不够的,需要在此基础上进行一系列定制。

青春不老,奋斗不止! 5259

Linux 库文件——静态库和共享库

假如现在自己实现了两个方法add和max,这两个实现就在一个静态库文件中,假设这个库文件名为libfoo.so,然后自己写了一个程序main.c,在main.c中调用了add方法,首先要将main.c编译为main.o二进制指令文件。接下来到了链接的步骤,链接的时候,其一,在主函数执行之前会执行一部分代码,这些代码从一些.o文件中链接过来,其二,我们会把像C库这样的标准库链接过来,其三,标记用到共享库中的add方法。把所用到的库都包含到自己的可执行程序中,无论这个环境中有没有相应的库程序都可以执行。

NuYoaH502329的博客 1720

opencv 双目摄像头拍照(分别左右镜头拍照)

准备一个usb线的双目同步摄像头: 运行环境是vc2015,opencv3.1。 将左右两个摄像头拍到的图片分别保存起来。 1)适用条件 双目同步摄像头(两个镜头,共用一个设备ID) 使用语言:C++ 、opencv库 摄像头 分辨率2560*960 或以上。 源程序: #include"stdafx.h" #include<iostream&g...

黎国溥 1万+

Linux——C程序编译gdb和库文件

预编译:展开所有的宏定义,将被包含的头文件内容插入到源代码中相应的位置。通常称为预处理文件       gcc -E main.c -o main.i   -o表示输出文件为  main.i。编译:词法分析,语法分析,语义分析,中间代码生成,中间代码优化,目标代码生成

weixin_75197906的博客 1207

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

编译Linux使用的.a库文件

编译Linux使用的.a库文件

孤独的糖三角 1万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

linux下编译自己的库文件实践

有了我传的那个资料,这个就没什么用了,那个太经典了,这个就是记录我自己的实践。:-) linux下文件的类型是不依赖于其后缀名的,但一般来讲:.o,是目标文件,相当于windows中的.obj文件.so 为共享库,是shared object,用于动态连接的,和dll差不多.a为静态库,是好多个.o合在一起,用于静态连接.la为libtool自动生成的一些共享库,主要记录了一些配置信息。...

anluzhe7791的博客 130

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Linux基础05(Linux上C/C++程序的编译与调试&库文件)

Linux上C/C++程序的编译与调试&库文件第五章、Linux上C/C++程序的编译与调试&库文件1.编译工具的安装2.gcc和g++的使用及区别3.编译链接的过程及分步编译过程4.make与makefile5.gdb调试6.库文件的生成与使用 第五章、Linux上C/C++程序的编译与调试&库文件 1.编译工具的安装 2.gcc和g++的使用及区别 3.编译链接的过程及...

麦克斯韦小迷妹儿~的博客 588

linux编译基础知识-库文件标准路径

在Linux系统中,库文件(包括动态库.so和静态库.a)按照一定的规范存放在标准路径中。了解这些路径对于编译和链接程序非常重要,特别是在处理依赖关系、解决"库文件未找到"错误以及进行软件打包时尤为关键。

Made In SQL 1850

linux下面编译库文件,linux下编译自己的库文件实践

有了我传的那个资料,这个就没什么用了,那个太经典了,这个就是记录我自己的实践。:-)linux下文件的类型是不依赖于其后缀名的,但一般来讲:.o,是目标文件,相当于windows中的.obj文件.so 为共享库,是shared object,用于动态连接的,和dll差不多.a为静态库,是好多个.o合在一起,用于静态连接.la为libtool自动生成的一些共享库,主要记录了一些配置信息。1.创建静态...

weixin_39658716的博客 259

交叉编译 linux库,linux一些库文件的交叉编译

参考出处:一步步教你交叉编译嵌入式linux GUI-directfb+gtk一、注意点:1、在./configure的--host的选项可以为arm-linux或arm-none-linux-gnueabi(编译工具cross-4.3.2,也是本次用的编译工具,在安装目录下的/bin文件夹里可以用ls -l看到编译工具除了arm-linux-gcc和arm-none-linux-gnueabi-...

weixin_39683863的博客 796

linux库文件的搜索方法,以及交叉编译的库搜索方法

1、库文件的搜索方式 库文件在连接(静态库和共享库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是在系统中进行设置的。一般 Linux 系统把 /lib 和 /usr/lib 两个目录作为默认的库搜索路径,所以使用这两个目录中的库时不需要进行设置搜索路径即可直接使用。对于处于默认库搜索路径之外的库,需要将库的位置添加到库的搜索路径之中。设置库文件的搜索路径有下列两种方式,可任选其一使用:

yuanlu837的专栏 5413

linux下的C/C++编译环境构建(gcc make cmake 头文件目录 库文件目录)

下载安装GNU套件 sudo apt install gcc sudo apt install g++ sudo apt install make sudo apt install cmake 其实一般linux都是默认安装了gnu套件的,我们可能需要安装一下cmake即可。 因为c/c++项目的头文件包含目录,库文件目录都和文件系统有关,我们先了解一下linux的目录结构,看看linux都有哪些目录,每个目录中的主要内容是什么? 以下是对这些目录的解释: /bin: bin 是 Binarie

qq_41854911的博客 5332
上一篇: SQL(1)
下一篇: hadoop编程实践(二)
zealscott
博客等级 码龄9年 327粉丝 196原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值