Linux编译程序时缺少连接库的解决办法

Linux的g++编译报错: undefined reference to `pthread_create‘ collect2: error: ld returned 1 exit status Multithread practice #include <iostream> #include <thread> void function1(){ for(int i =0; i< 200; i++){ std::cout << "+"; } } void function2(){ for(int i= 0; i< 200; i++){ std::cout << "-"; 阅读详情
Linux编译程序时缺少连接库的解决办法

Linux编译程序时如果缺少连接库会提示如下错误:
$ gcc  test.c -o test  -lxxx
/usr/bin/ld: cannot find -lxxx
collect2: error: ld returned 1 exit status

先介绍下GCC命令的 -L 和 -l 参数。
-l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢?
就拿数学库来说,他的库名是m,他的库文件名是libm.so,很容易看出,把库文件名的头lib和尾.so去掉就是库名了。

好了,现在我们知道怎么得到库名了,比如我们自已要用到一个第三方提供的库名字叫libtest.so,那么我们只要把libtest.so拷贝到/usr/lib里,编译时加上-ltest参数,我们就能用上libtest.so库了(当然要用libtest.so库里的函数,我们还需要与libtest.so配套的头文件)。

放在/lib和/usr/lib和/usr/local/lib里的库直接用-l参数就能链接了,但如果库文件没放在这三个目录里,而是放在其他目录里,这时我们只用-l参数的话,链接还是会出错,出错信息大概是:“/usr/bin/ld: cannot find -lxxx”,也就是链接程序ld在那三个目录里找不到libxxx.so。这时另外一个参数-L就派上用场了,比如常用的X11的库,它放在/usr/X11R6/lib目录下,我们编译时就要用-L/usr/X11R6/lib -lX11参数,-L参数跟着的是库文件所在的目录名。再比如我们把libtest.so放在/aaa/bbb/ccc目录下,那链接参数就是-L/aaa/bbb/ccc -ltest。

现在以Ubuntu系统为例,说说解决办法。
先查找静态库xxx所在路径:
$ sudo find / -name *xxx*
假设确定找到xxx库文件路径是 /usr/local/lib/xxx
然后用-L选项把目录加上编译:
$ gcc  test.c -o test  -L/usr/local/lib/xxx -lxxx


问题解决。


参考:

http://blog.youkuaiyun.com/jiafu1115/article/details/8842240

http://blog.youkuaiyun.com/wangzhen209/article/details/47153239


图解B树的原理及操作 本文主要参考:https://blog.csdn.net/shenchaohao12321/article/details/83243314 1. B树 1.1 B树的定义 B树也称B-树,它是一颗多路平衡查找树。我们描述一颗B树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点,一般用字母m表示阶数。当m取2时,就是我们常见的二叉搜索树。 一颗m阶的B树定义如下: 1)每个结点最多有m-1个关键字。 2)根结点最少可以只有1个关键字。 3)非根结点至少有Math.ceil(m/2)- 阅读详情

相关推荐

保姆级教程:用vxe-grid给管理后台加个「智能筛选」功能(支持模糊搜索/多选/范围查询)

本文提供了一份详细的Vxe-Grid智能筛选功能实现教程。通过自定义筛选器渲染,文章逐步指导开发者为后台管理系统添加支持模糊搜索、多选下拉和数值范围查询的智能筛选功能,并分享了性能优化与移动端适配等实战经验。

weixin_29021291的博客 536

linux 安装程序丢失链接动态库,linux下链接时缺少动态链接库

1, 用ln将需要的so文件链接到/usr/lib或者/lib这两个默认的目录下边ln-s/where/you/install/lib/*.so/usr/libsudoldconfig2,修改LD_LIBRARY_PATHexportLD_LIBRARY_PATH=/where/you/install/lib:$LD_LIBRARY_PATHsudoldconfig3.修改/etc/l...

weixin_26736139的博客 338

mpu6050原理图_STM32控制 MPU6050 六轴陀螺仪资料汇总

一般使用MPU6050的步骤是先驱动I2C总线,然后初始化MPU6050,从MPU6050读取数据,最后是数据的处理。本文档详细介绍有关MPU6050 三维角度传感器电子陀螺仪使用说明。附件内容提供该 MPU6050模块原理图,配套STM32代码,相关数据手册及参考文档。实物连接图:MPU6050 六轴陀螺仪特点:使用芯片:MPU-6050供电电源:3-5v(内部低压差稳压)通信方式:标...

weixin_39911056的博客 4758

/usr/bin/ld: 找不到 -ludev

在编译程序时会遇到 “ 找不到 -ludev ” 的问题,udev下的文件能够指定USB的规则。要解决这个问题,顺利的话依照下面代码安装两个文件即可解决: sudo apt-get install libudev1 libudev-dev 但我在安装时提示下面的错误: libudev-dev 错误 libudev1 (= 204-5ubuntu20) 但是 204-5ubuntu20.5 正...

笑看零一的博客 6632

vscode配置matlab工作环境

前面有两篇文章我们分别讲了在vscode里面如何配置C语言环境和python环境,那两篇文章总体来说比较复杂,当然这篇也有许多有趣的问题。 附上链接: 文章目录matlab简介基本要求code runner插件与matlab相关的插件添加路径小结code runner是否支持更多语言更多选择另一个选择 matlab简介 MATLAB是美国MathWorks公司出品的商业数学软件,用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人,控制系统等领域。 MATLAB是ma

Cachel Wood的博客 4541

【AIGC】Qwen3-Embedding:Embedding与Rerank模型新标杆

Qwen3-Embedding:文本嵌入与重排序模型的技术解析与应用实践

一个内容严谨、方向前沿、极具实践价值的AI大模型技术分享站 3094

Linux执行程序时缺少连接库的解决办法

Linux执行程序时缺少动态连接库的解决办法 Linux执行程序时如果缺少动态连接库会提示如下错误: xxx.so cannot open shared object file: No such file or directory 总结下来主要有下面三种解决方法,以Ubuntu系统为例。 第1种方法:用ln将需要的so文件链接到/usr/lib或者/lib这两个默认的目录下边 $

iw1210的专栏 2425

SAP公司间STO业务解析(包含主数据解析、后台配置解析、前台业务演示)

SAP公司间STO业务解析

ww114784的博客 1017

Linux编译程序时找不到头文件的解决办法

Linux编译程序时找不到头文件的解决办法 $ gcc test.c -o test test.c:9:16: fatal error: xxx.h: No such file or directory  #include 下面叙述以Ubuntu系统为例。 先查找 xxx.h 所在路径: $ sudo find / -name xxx.h /usr/local/include

iw1210的专栏 6万+

光学材料仿真软件:FDTD Solutions_(4).材料属性的定义与应用

在光学材料仿真软件中,材料属性的定义和应用是至关重要的一步。正确地定义材料属性可以确保仿真结果的准确性和可靠性。本节将详细介绍如何在FDTD Solutions中定义和应用不同的材料属性,包括介质材料、金属材料、色散材料等,并提供具体的代码示例和数据样例。介质材料是光学仿真中最常见的材料类型之一。在FDTD Solutions中,可以通过多种方式定义介质材料,包括使用预定义的材料库、自定义材料参数或导入材料数据文件。FDTD Solutions内置了一个丰富的材料库,包含了许多常用材料的光学性质。

kkchenjj的博客 1401

看懂特斯拉IMU底层逻辑,才懂农业机器人不可替代的核心技术壁垒

在自动驾驶与具身智能赛道,特斯拉彻底重构了IMU(惯性测量单元)的技术定位,打破行业“IMU仅为辅助补盲配件”的固有认知,将其从底盘附属硬件升级为纯视觉感知体系的物理核心基座。依托500–1000Hz超高刷新率、无外部依赖的惯性感知能力、端到端神经网络融合架构,特斯拉实现了“视觉感知环境、IMU定义运动”的技术闭环,摆脱对激光雷达、高精地图、卫星定位的强依赖。这套技术逻辑落地农业机器人赛道,不再是技术优化,而是规模化落地的生存刚需。城市自动驾驶属于结构化稳定场景,IMU仅作误差修正的锦上添花;

getusushu的博客 49

Linux下编译程序/usr/bin/ld: cannot find -l*错误的解决方法

Linux下编译程序的时候,出现/usr/bin/ld: cannot find -lxxx的错误,主要的原因是找不到相应的动态库,库文件没有导入到ld检索目录中。常见的链接不到动态库的错误信息如下:…动态库的名称就是-l后面的名称,如-lpng,就是png动态库。...

叶落花枯的博客 4万+

国网DLT698.45协议——采集系统、数据交换(一)

对于国网698协议,是一种面向对象的通信协议,用于远程监控和控制电力系统中的设备。面向对象使得对协议的思考更趋向于正常思维,使计算机中描述的抽象世界于现实世界中能够更好的对应起来。协议中就是将各种方法和属性对应描述成类和对象。接下来是我学习该协议的一些总结和认识,欢迎大家随时在评论区或者私信我交流学习。:系统=对象+消息:程序=算法+数据对象和接口类描述:类描述了一组具有相同属性和相同方法的对象。

一个bug是bug,多个bug能work 1万+

如何交叉编译程序:以 freetype 为例

怎么确定“系统目录”? echo 'main(){}'| arm-linux-gnueabihf-gcc -E -v - 系统头文件目录 以stdio.h为例: /home/book/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/include 系统库目录LIBRARY_PATH: /home/book/100ask_imx6ul

qq_28816873的博客 2810

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

linux 编译程序 so库为什么要建立软链接

简单说,软链接就是 “库的别名”,一边对接编译 / 运行时的 “通用查找规则”,一边关联实际的库文件,既简化操作又保证版本可控。编译程序时,你只需要写 -lopencv_videoio(链接 OpenCV 的视频 IO 库),链接器会自动去找。一个库可能有多个版本(比如 OpenCV 4.2、4.3),通过软链接可以快速切换默认版本,无需修改代码或编译配置。),一旦库版本更新(比如升到 4.3.0),所有编译命令都要跟着改,非常麻烦。如果没有这个软链接,你得手动指定完整的版本名(比如 -

qq_42831621的博客 411

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Linux系统编译程序文件

文件类型扩展名内容作用生成命令示例源代码文件.c.cpp原始程序代码编译起点手动编写预处理文件.i展开头文件/宏后的代码消除预处理指令汇编文件.s汇编指令生成机器码基础目标文件.oELF格式机器码 + 符号表链接的输入单元可执行文件无完整ELF文件 + 启动代码直接运行静态库.a多个.o的归档编译时嵌入动态库.so位置无关代码 + 符号表运行时加载核心转储文件core程序崩溃时的内存状态调试崩溃原因程序崩溃时自动生成Map文件.map内存地址分配详情优化内存布局。

C/C++ 1007

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Linux学习笔记-编译程序时找不到头文件的解决办法

Linux编译程序时如果找不到头文件会提示如下错误: $ gcc test.c -o test test.c:9:16: fatal error: xxx.h: No suchfile or directory  #include   下面叙述以Ubuntu系统为例。 先查找 xxx.h 所在路径: $ sudo find / -name xxx.h /usr/local/incl

ydjaiziji90的博客 7713

常见的LINUX发行版安装libiconv库方法

今天编译程序,发现程序报错,如下 cannot find -liconv collect2: ld returned 1 exit status 或者 undefined reference to `libiconv_open'   collect2: ld returned 1 exit status 是因为没有安装liconv包   iconv命令是用来转换文件的编码方式的

w._.m 2万+

linux 编译程序时缺少库文件

1、vi 当前用户主目录下 .bashrc        在最好加上       export PATH=$PATH:/opt/libs(库文件所在目录)        保存后,执行source .bashrc        2、vi  /etc/ld.so.conf          在其中加入所缺库的目录                   保存后           执行

zcg1041的专栏 1102

Linux于自动化编译程序命令——make

在Linux系统中,make命令是一个强大且有用的工具,它被广泛用于构建和管理软件项目。本文将详细介绍make命令的使用以及它在开发过程中的重要性。

小嵌同学的博客 2042

交叉编译程序

如果交叉编译工具链的前缀是arm-buildroot-linux-gnueabihf-,在交叉编译开源软件时如果里面有configure,万能命令如下。为了知道我使用当前编译器时会遍历哪些头文件路径以及库文件路径时,可以用以下命令(这里使用的编译器为。后面遇到具体的程序时同上过程。交叉编译程序的万能命令。

kuinnebula的博客 1082

在交叉编译程序或core dump调试时设置sysroot

core dump

qq2572905850的博客 2093
上一篇: Linux下线程同步的几种方法
下一篇: Linux编译程序时找不到头文件的解决办法
ASKLW
博客等级 码龄14年 494粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值