编译程序时使用了如下参数指定了链接库的位置,但是执行时提示无法加载共享库。
#gcc test.c -L /usr/local/rrdtool-1.2.30/lib -lrrd
现象:
error while loading libraries:librrd.so.2:cannot open shared object file:No such file or directory
解决方法:
使用ldd命令 查看编译生成的可执行文件发现:
#ldd a.out
命令输出结果:
librrd.so.2 => not found
修改/etc/ld.so.conf文件添加 目录——/usr/local/rrdtool-1.2.30/lib
执行如下命令:
#ldconfig
再次执行如下命令:
#ldd a.out
本身输出:
librrd.so.2 => /usr/local/rrdtool-1.2.30/lib/librrd.so.2
原理:
编译时确实是通过了,因为你编译时指定了编译时需要的有关该共享库的信息。
但是没有指定运行时(run time)所需要的信息;man一把ldconfig命令就知道原因了。
ldconfig creates the necessary links and cache to the most recent shared libraries found in the directories specified on the command line, in the file /etc/ld.so.conf, and in the trusted directories (/lib and /usr/lib). The cache(/etc/ld.so.cache
) is used by the run-time linker, ld.so or ld-linux.so.
需要的动态来接库的目录路径,必须在/etc/ld.so.cache 文件中,而该文件是通过ld.so.conf指定的目录,以及信任目录(/lib and /usr/lib),使用ldconfig命令生成的。ldd命令也查看可执行文件所依赖的动态库信息时,也使用了/etc/ld.so.cache文件,因此在没有将所需要的动态库目录添加到ld.so.conf中且执行ldconfig时,会提示该库"not found"
from:http://blog.163.com/lyzaily@126/blog/static/42438837201222373118749/
分享到:
相关推荐
共享库也是.o文件的集合,但是这些文件由编译器按照一种特殊的方式生成(Linux中,共享库文件为"ELF"格式,共享库已经具备了可执行条件)。 共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单...
编译函数源程序时选用-shared选项即可创建动态链接库,注意应以.so后缀命名,最好放到公用库目录(如/lib,/usr/lib等)下面,并要写好用户接口文件,以便其它用户共享。使用动态链接库,源程序中要包含dlfcn.h头文件,...
在链接动态库生成可执行文件时,并不会把动态库的代码复制到执行文件中,而是在执行文件中记录对动态库的引用。 程序执行时,再去加载动态库文件。如果动态库已经加载,则不必重复加载,从而能节省内存空间。 Linux...
文件的可执行性 行结束字符串 忽略未版本控制的条目 关键字替换 锁定 创建锁定 发现锁定 解除和偷窃锁定 锁定交流 外部定义 Peg和实施修订版本 网络模型 请求和响应 客户端凭证缓存 4. 分支与合并 什么是分支? 使用...
另外,可以使用ldd命令查询某可执行文件依赖哪些共享库,比如ldd /bin/bash,可以查看bash依赖的共享库文件。 使用该工程生成的静态库或共享库时,需要在C++代码中 #include "serializer.h" #include "parser.h" #...
在链接动态库生成可执行文件时,并不会把动态库的代码复制到执行文件中,而是在执行文件中记录对动态库的引用。 程序执行时,再去加载动态库文件。如果动态库已经加载,则不必重复加载,从而能节省内存空间。 ...
工作原因查了需要在机顶...直接上传到机顶盒等安卓环境或嵌入式linux环境下,解压缩,(默认会解压缩到/data/data/apache-for-android目录下,可自行调整),注意需要检查解压缩后的httpd有可执行权限;特共享给大家!
共享库也是.o文件的集合,但是这些文件由编译器按照一种特殊的方式生成(Linux中,共享库文件为"ELF"格式,共享库已经具备了可执行条件)。 共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单...
linux中的文件(普通文件或设备文件等)都必须有挂在点,只有挂载到一个目录下才能访问,swap分区是不需要挂载点的,在分区的时候,将文件系统类型选为swap,挂载点自动会变为灰色。一般linux中的swap大小为内存的两倍。...
tftp -i 自己IP(用肉机作跳板时这用肉机IP) get server.exec:server.exe 登陆后,将“IP”的server.exe下载到目标主机c:server.exe 参数:-i指以二进制模式传送,如传送exe文件时用,如不加-i 则以ASCII模式(传送...
本书全面系统地介绍了Red Hat Linux 6。全书共分为五个部分,包括35章和四个附录。第一部分为Red Hat Linux的介绍和安装;第二部分为服务配置;第三部分为系统管理;第四部分为Linux编程;第五部分为附录。本书内容...
Linux的树型结构,Linux的文本编辑,Linux的安装和启动,用户管理,Shell编程技术,进程管理,C编译器,系统扩充,维护与监视,Linux的图形界面,网络的基本概念与设置,Linux在网络资源共享和电子邮件方面的应用,...
12.2.17 配置打印共享:Linux到 Windows 161 12.2.18 配置打印共享:Windows到 Linux 162 12.2.19 测试打印共享 163 12.2.20 访问一个Windows硬盘驱动器 163 第13章 连接到因特网 164 13.1 概述 164 13.1.1 PPP拨号...
linux-inject在最先找到的内存可执行区域写入代码,该内存区域可能被其他线程引用。 这会将其写入除非libc本身作为程序执行,否则任何人都不会引用它。 仅在Ubuntu 16.04 x86_64和Debian 8 arm64上对此进行了测试...
Linux 操作系统基础教程 清华大学信息学院计算机系 目 录 前言..........................................................................................................................................
文件为doc版,可自行转成txt,在手机上看挺好的。 本资源来自网络,如有纰漏还请告知,如觉得还不错,请留言告知后来人,谢谢!!!!! 入门学习Linux常用必会60个命令实例详解 Linux必学的60个命令 Linux提供...
xbin :下放了很多系统管理工具,这些工具不是到toolbox的链接,每个都是可执行程序。如果你看到这些命令你会发现他们根本不常用,他们都是为系统管理员准备的,是一些系统管理和配置工具。这个文件夹的作用相当於...
允许浏览和修改任何rclone远程,包括加密的rclone使用与rclone相同的配置文件,不需要额外的配置支持rclone.conf配置文件的自定义位置和加密同时在单独的选项卡中导航多个存储库列出文件的名称,大小和层次结构修改...
本书详细介绍如何在个人电脑上安装配置Caldera和Red Hat两种发行版本的Linux操作系统,并能帮助用户解决安装和配置过程中出现的各种问题。本书既能指导你进行基本的安装步骤,也能指导你定制独具特色的Linux 操作...