首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux gcc编译生成静态库和共享动态库过程

-lmyhello 原因也是一样,可执行文件hello找不到链接库: 1 2 3 4 5 [root@typecodes ~]# ldd hello linux-vdso.so.1 =.../lib、/lib64: 系统必备共享库 /usr/lib、/usr/lib64: 标准共享库和静态库 /usr/local/...同时,执行程序时如果报错提示找不到对应库文件(可以通过readelf -d hello验证),那么一共有4种方法。...1、添加库路径到 /etc/ld.so.conf.d/ 目录下配置文件中,然后执行命令ldconfig; 2、添加库路径到 LD_LIBRARY_PATH 环境变量中; 3、在编译链接命令中加入参数...-rpath=库文件所在路径 ; 4、最简单方式:把库文件拷贝到Linux系统库文件所在目录下(/lib、/lib64、/usr/lib、/usr/lib64、/usr/local/lib等)。

30810

详解共享库动态加载

, 我们已经知道main依赖于librandom.so, 那么,为什么在运行时main找不到librandom.so ? 运行时搜索路径 ldd是一个工具,使我们可以查看递归共享库依赖关系。...难怪找不到我们共享库-所在目录librandom.so不在搜索路径中!解决此问题最特别的方法是使用LD_LIBRARY_PATH: $ LD_LIBRARY_PATH=. ....具体来说,它们与LD_LIBRARY_PATH顺序: rpathLD_LIBRARY_PATH之前搜索,而runpathLD_LIBRARY_PATH之后搜索。...结果是main可以每个目录下工作并librandom.so正确找到: $ ....使用$ORIGIN相对于可执行文件路径。 如果ldd显示没有依赖项丢失,请查看您应用程序是否具有提升特权。如果是这样,ldd可能会撒谎。请参阅上面的安全问题。

3K20
您找到你想要的搜索结果了吗?
是的
没有找到

编译自定义Python二进制程序

我用ldd命令检查下Python二进制程序依赖库文件: [root@centos-linux-7 deps]# ldd /usr/local/python27/bin/python linux-vdso.so...但在我场景里,python编译时还需要启用ssl、hashlib、readline等模块,而这些模块编译时会依赖系统非核心库文件,我分析Python源代码目录下setup.py文件,发现依赖关系如下.../configure --prefix=/usr/local/python27 --with-cxx-main=/usr/bin/g++ make -j4 && make install 最后检查下编译出...python二进制程序文件及各模块动态库文件,发现仅依赖系统核心库文件,效果很好: [root@centos-linux-7 python27]# ldd /usr/local/python27/bin.../python27 -name '*.so'|xargs ldd /usr/local/python27/lib/python2.7/lib-dynload/nis.so: linux-vdso.so

1.9K10

详解tensorflow2.x版本无法调用gpu一种解决方法

但是安装过程中了解到系统cuda安装目录,位于/usr/local/cuda下面,这个libcudnn.so.7应该是一个库文件,那应该放在cuda安装目录下面,具体地,/usr/local/cuda...于是,打开lib64目录,查找是否有libcudnn.so.7这个文件,结果是没有找到这个文件,这就很奇怪了,cuda10.1目录下面竟然没有cudnn文件,我也没有权限修改/usr/local,因此想到既然是少了这个文件...接下来就是添加环境变量,让tensorflow不仅在/usr/local/cuda/lib64下找文件,还可以我这个目录下找,添加命令: export PATH=$PATH:/usr/local/cuda...cudalib64录下,如果找得到这些文件,那有可能是环境变量设错了,可以试试上面那些命令: export PATH=$PATH:/usr/local/cuda-10.1/bin export LD_LIBRARY_PATH...=$LD_LIBRARY_PATH:/usr/local/cuda-10.1/lib64 export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda-10.1/lib64

3K30

怎样 Linux 中使用动态和静态库

这是因为负责应用启动之前将所有依赖加载进内存动态链接器没有它搜索标准路径下找到这个库。 对新手来说,与常用库(例如 bizp2)版本不兼容相关问题往往十分令人困惑。...本例中,正确版本就在这个目录下,所以你可以导出它至环境变量: $ LD_LIBRARY_PATH=$(pwd):$LD_LIBRARY_PATH $ export LD_LIBRARY_PATH 现在动态链接器知道去哪找库了.../lib64/ld-linux-x86-64.so.2: symbolic link to ld-2.31.so 回头看看 ldd 命令输出,你还可以看到( libmy_shared.so 边上)...共享对象常见命名格式为: libXYZ.so.. 系统中,libc.so.6 也是指向同一目录下共享对象 libc-2.31.so 软链接。...unset LD_LIBRARY_PATH sudo cp libmy_shared.so /usr/lib64/ 当你运行 ldd 时,你现在可以看到归档库路径被展示出来: $ ldd my_app

2K21

Linux下动态链接库加载路径及搜索路径问题

(2)ldd是查看可执行文件中所依赖程序,比如想查main程序用到了那些动态库,可以直接 ldd main (3)ldconfig用来更新文件/etc/ld.so.conf修改生效。...ld.so.conf.d/*.conf 因此,最优雅方式是ld.so.conf.d目录下创建一个你程序依赖配置文件,配置文件内容为程序依赖动态链接库路径,一个路径一行。...4.默认动态库搜索路径/lib; 5.默认动态库搜索路径/usr/lib; 1、可以用 LD_LIBRARY_PATH 环境变量指定,这个类似于 PATH 机制,比较直观,而且,可以放到 bashrc...3、默认标准库路径,这个似乎不用设置就可以。包括 /lib 和 /usr/lib。当然,如果是64位系统,还包括 /lib64 和 /usr/lib64。...奇怪是, /usr/local/lib 和 /usr/local/lib64 居然不在标准路径之列。

9.7K63

Linux系统下实现QT程序打包发布

linuxldd命令也可以查找可执行文件依赖库,这个脚本功能和ldd命令功能一样,写成脚本是为了方便,查找之后就拷贝过来。...为了发布过程不出现各种BUG,找不到库、找不到平台等等一系列问题,现在使用一个笨办法。 将QT使用编译器目录下所有库拷贝到camera_linux_app目录下,有覆盖就不管。...将QT使用编译器目录下plugins文件夹拷贝到camera_linux_app目录下。 (5). camera_linux_app目录下编写一个app启动脚本。...接下来就可以将这个打包文件拷贝到其他没有QT环境电脑上解压运行了。 运行时候,执行(camera_linux_app)目录下脚本文件(ffmpeg_code.sh)即可。...这样打包占用空间比较大,拷贝了很多没有用到库,但是不会出现各种库缺失问题。。

7.2K41

ldd 和ldconfig

ldconfig 命令用途,主要是默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列录下,搜索出可共享动态链接库(格式如前介绍,lib*.so*)...这就是为什么修改了ld.so.conf要重新运行一下ldconfig原因 补充一点,ldconfig/sbin里面。 ldconfig几个需要注意地方 1....想往上面两个目录以外加东西时候,一定要修改/etc/ld.so.conf,然后再调用ldconfig,不然也会找不到 比如安装了一个MySQL到/usr/local/mysql,mysql有一大堆...library/usr/local/mysql/lib下面,这时就需要在/etc/ld.so.conf下面加一行/usr/local/mysql/lib,保存过后ldconfig一下,新library...那也可以,就是export一个全局变量LD_LIBRARY_PATH,然后运行程序时候就会去这个目录中找library。一般来讲这只是一种临时解决方案,没有权限或临时需要时候使用。

75530

详解动态库和静态库

为什么搜索头文件时候仅需指定路径呢?...,来使用静态库: 虽然生成了可执行文件,但是可执行文件出错了 使用ldd a.out时,发现libmyc.so => not found,动态库没有被找到,编译期间已经告诉系统对应头文件以及库位置...动态库要在程序运行时候要找到动态库加载运行。静态库为什么没有这个问题?因为静态库在编译期间已经将库中代码拷贝到可执行程序内部了,加载和库就没有关系了。...解决该问题,有以下四种方法: 将库文件拷贝到系统默认库路(/lib64、/usr/lib64),不推荐使用这种方法,因为修改了系统规定库,降低了系统健康指数 系统默认库路径(/lib64、/usr.../lib64)下建立软链接 将自己库所在路径,添加到系统环境变量 LD_LIBRARY_PATH 中,该环境变量就是专门用来搜索动态库 但是重新启动系统后,就找不到该环境变量,如果想让系统启动时自动添加该路径到

9810

动态库制作与两种使用方式你掌握了吗?

前言 《如何制作属于自己静态库》中简单介绍了静态库制作方法,但实际上动态库使用更为广泛,至于原因,《静态库和动态库区别》一文中已有说明。本文介绍动态库制作方法以及两种使用方式。...-ltest 其中-L指定从当前目录下寻找动态库libtest.so,否则会找不到。...这是为什么呢?...其实我们使用ldd命令查看时候,就注意到: libtest.so => not found 它并不能找到这个动态库,因为它会默认从系统库路径去查找这个库,但是我们并没有把这个库放到系统路径下,因此会找不到了...当然了,至于问题原因,我们在前面已经提到了,是由于没有设置动态库搜索路径或者系统默认库路径下没有我们需要libtest.so。按照前面提供两种方法修正后,重新运行: $ .

1.4K50

Linux动态链接

问题 曾经不止一次遇到过这样情况:从机器A拷贝一个二进制文件到另一台机器B,两台机器操作系统版本一样,可是机器A能正常运行,机器B却提示错误。最常见就是提示动态链接库找不到,如: ..../usr/local/lib:第三方动态链接库。 由/etc/ld.so.conf配置文件指定目录。...程序启动查找动态链接库路径顺序如下: 由LD_LIBRARY_PATH指定路径。 由路径缓存文件/etc/ld.so.cache指定路径。 默认共享库目录,先/usr/lib,然后/lib。...ldd 通过ldd elf_file可以查看ELF文件依赖哪些动态链接库,如 $ ldd test linux-vdso.so.1 => (0x00007ffc89b46000) libstdc++..../lib64/ld-linux-x86-64.so.2是一个动态链接库绝对路径。

5K91

浅谈Linux动态链接库

ldd命令查看动态链接库依赖 Linux上,动态链接库有默认部署位置,很多重要库放在了系统/lib和/usr/lib两个路径下。...一些常用Linux命令非常依赖/lib和/usr/lib64下面的各个库,比如:scp、rm、cp、mv等Linux下常用命令非常依赖/lib和/usr/lib64各个库。...如果找不到,需要使用环境变量LD_LIBRARY_PATH来调整,下文将介绍环境变量LD_LIBRARY_PATH。 SONAME文件命名规则 so文件后面往往跟着很多数字,这表示了不同版本。...export LD_LIBRARY_PATH=/opt/cuda/cuda-toolkit/lib64:$LD_LIBRARY_PATH 如果在执行某个具体程序前先执行上面的命令,那么这个程序将使用这个路径下...链接时,GCC链接器ld就会前往LD_LIBRARY_PATH环境变量、/etc/ld.so.cache缓存文件和/usr/lib和/lib目录下去查找libname.so。

8.7K30
领券