/usr/bin/ld:cannotfind-l基本原理解释与解决方法(代码片段)

boyhoodme boyhoodme     2023-04-05     565

关键词:

1. 问题


在编译时,出现找不到动态库的问题。比如/usr/bin/ld: cannot find -lpangolin,解释:-l是link的意思,pangolin是库的名字。


2. 基础知识


2.1 ldconfig

它是通过ldconfig工具寻找系统内可供调用的动态库。而这些库所在位置是由一个叫做/etc/ld.so.conf.d/目录下以.conf结尾的文件定义。这些文件里写的路径往往是/usr/local/lib /lib/x86_64-linux-gnu之类的路径。也就是说我们的库只要在类似/usr/local/lib /lib/x86_64-linux-gnu的路径下,ldconfig就可以找到这些库。


2.2 sudo make install

在源码编译某些包后,比如Pangolin,产生了很多动态库****.so。我们想让它被系统内任何程序都能调用。于是,通过命令sudo make install把编译好的****.so文件安装到/usr/local/lib/目录下。


3. 问题解决

直接去/usr/local/lib/目录搜索pangolin发现是可以搜到如下文件:

libpango_core.so
libpango_display.so
libpango_geometry.so
libpango_glgeometry.so
libpango_image.so
libpango_opengl.so
libpango_packetstream.so
libpango_plot.so
libpango_python.so
libpango_scene.so
libpango_tools.so
libpango_vars.so
libpango_video.so
libpango_windowing.so

注意pangolin的库文件名字不一定就叫pangolin.so,一般前面都有前缀lib。而我们发现这些文件中并没有所期望的libpangolin.so。它在哪呢?

它其实是上述libpango_xxx.so的合集。一般在ROS工作空间编译时,他会把某些package编译成一个动态库文件。方便其他package之间直接调用。
下面是一些例子:

$HOME/kimera_ws/build/kimera_rpgo/libKimeraRPGO.so
$HOME/kimera_ws/build/pangolin/src/libpangolin.so

所以我们通过软链接,把$HOME/kimera_ws/build/pangolin/src/libpangolin.so放到/usr/local/lib/下面就OK。ldconfig就可以找到-lpangolin了。软链接示例命令如下。

sudo ln -s $HOME/kimera_ws/build/pangolin/src/libpangolin.so /usr/local/lib/libpangolin.so

在 64 位机器上编译 32 位:/usr/bin/ld: 找不到 -l<someLibs>

...;someLibs>【英文标题】:Compiling32biton64bitmachine:/usr/bin/ld:cannotfind-l<someLibs>【发布时间】:2013-09-3013:44:58【问题描述】:我目前正在尝试在64位Ubuntu12.04机器上将一些代码编译为32位。如果我用正常的make命令编译代码,一切正... 查看详情

qtopia编译错误

...sp;  错误一:      /usr/bin/ld:cannotfind-l 查看详情

linux自己写的静态库gcc报错

...下gcc-l/home/zizz/linuxc/libstatic_lib.amain.c-oapp报错:/usr/bin/ld:cannotfind-l/gccmain.c-static./static_lib.a-oapp只有-static选项能编译通过,为什么呢?gccmain.c-static./static_lib.a-oapp参考技术A>gcc-L.main.c-oapp>定义在头文件中的函数main函数调用为未... 查看详情

基指针中的派生对象如何调用基函数?

】基指针中的派生对象如何调用基函数?【英文标题】:Howderivedobjectinbasepointerinvokesbasefunction?【发布时间】:2011-07-2104:46:54【问题描述】:持有派生对象的基指针如何仍然指向基函数?在此之后a_ptr=&b_obj;a_ptr->disp();如果基... 查看详情

线性基学习

线性基所谓基就是基底线性基就可以理解为n个数异或(xor)的基底性质1,线性基的异或集合中不存在0(很容易证明:根据xor的性质即可)2,线性基能相互异或得到原集合的所有相互异或得到的值(这也是线性基的优美之处)3... 查看详情

肖特基二极管的作用与识别方法

   1.作用  肖特基二极管的主要特性是单向导电性,也就是在正向电压的作用下,导通电阻很小;而在反向电压作用下导通电阻极大或无穷大。  肖特基二极管按用途分为:晶体肖特基二极管、双向触发肖特基二极管... 查看详情

线性基小节

1.线性基的异或集合中每个元素的异或方案唯一。2.线性基二进制最高位互不相同。3.线性基中元素互相异或,异或集合不变。摘自百度文库线性基能相互异或得到原集合的所有相互异或得到的值。线性基是满足性质1的最小的集... 查看详情

浅析功率型肖特基二极管的结构类型

...在生产电子产品会用到一种必不可少的材料,那就是肖特基二极管,究竟为什么要用肖特基二极管那,肖特基二极管到底有何魔力那?  功率肖特基二极管包括普通功率肖特基势垒二极管(PowerSchottkyBarrierDiode,SBD)、结势垒控制... 查看详情

C++ - 替换基类方法

】C++-替换基类方法【英文标题】:C++-Replacebaseclassmethod【发布时间】:2021-06-2300:19:00【问题描述】:我想调用一个基类方法,如果它被覆盖,则调用被覆盖的方法,否则,调用基类方法。这个想法是:我有一个基类虚拟方法,如... 查看详情

线性基

线性基是一个神奇的东西!!……定义:  设数集T的值域范围为[1,2n?1]  T的线性基是TT的一个子集A=a1,a2,a3,...,an  A中元素互相xor所形成的异或集合,等价于原数集TT的元素互相xor形成的异或集合。  可以理解为将原数集... 查看详情

关于线性基的一丢丢理解

线性基有趣的东西在某次考试时人人都切了一道题时才发现我没学过线性基。。。是什么我感觉它就是一个类似于向量基底的东西线性基中的元素任选几个异或起来是可以表达出原数组中的所有的值的,并且不能搞出其它的数性... 查看详情

魔法弹(线性基)(代码片段)

魔法弹(线性基)给出n个m位数,问它们张成的异或集合的大小。关于线性基,这篇博文讲的太好了:所谓线性基,就是线性代数里面的概念。一组线性无关的向量便可以作为一组基底,张起一个线性的向量空间,这个基地又称... 查看详情

线性基浅谈(代码片段)

线性基通常用于解决一系列关于异或的问题。定义:线性基支持log插入,用一个数组来存储线性基,其中,第i个线性基就是第i位是1的数。由此,给出插入线性基的板子。voidinsert(intx)for(inti=31;i>=0;i--)if(!(x&(1<<i)))continue;i... 查看详情

线性基学习

...写了博客。不写博客的东西总有一天会忘。概述对于线性基中所有的子集的异或和的集合与线性基中的插入所有数的所有子集的异或和的集合相等。即线性基代表了原数集中的所有异或和。线性基中所有子集的异或和两两不同。... 查看详情

线性基初探(代码片段)

关于线性基的学习与理解1、线性基:  若干数的线性基是一组数(a_1,a_2,...a_n)其中(a_x)的最高位的1在第x位。    通过线性基中元素(xor)出的数的值域与原来的数(xor)出数的值域相同。2、线性基的构造法:  对每一个数(p)... 查看详情

径向基神经网络

...据映射到高维空间比映射到低维空间更可能线性可分径向基函数:空间中的任意点到某一中心之间的欧式距离(也可以是其他的距离函数)的单调函数径向基神经网络是由一个三层的结构组成,包括输入层,隐含层,输出层,隐含... 查看详情

将字符串从一个基转换为另一个基

/** *Convertastringtoastringinanotherbase * *Note:basedonhttp://php.net/manual/en/function.base-convert.php#55204 *Note:thebasesareonlylimitedtothelengthof$sFromMapand$sToMapand$sN 查看详情

为啥基类指针指向基类中的纯虚方法,而不是派生类中的覆盖方法?

】为啥基类指针指向基类中的纯虚方法,而不是派生类中的覆盖方法?【英文标题】:Whydoesthebaseclasspointerpointtothepurevirtualmethodinthebaseclassinsteadoftheoveriddenmethodinthederivedclass?为什么基类指针指向基类中的纯虚方法,而不是派生类... 查看详情