`

Linux可执行文件执行时找不到共享库

 
阅读更多
      编译程序时使用了如下参数指定了链接库的位置,但是执行时提示无法加载共享库。

     #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/
分享到:
评论

相关推荐

    MAKEFILE(静态库,动态库,可执行文件)模板

    **动态库**,也称为共享库,在运行时动态加载到进程内存中,通常具有`.so`扩展名(在Linux上)。创建动态库的`Makefile`规则如下: ```make libname.so: object_files gcc -shared -o libname.so object_files ```...

    linux静态库和共享库.pdf

    这意味着最终的可执行文件包含库的所有代码,因此其体积较大,但优点是不需要在运行时寻找库文件,使得程序在没有特定库的环境中也能运行。 另一方面,共享库(动态库)具有`.so`扩展名,如`libfoo.so.1.0`。它们在...

    Linux 可执行文件格式详细文档

    ELF格式不仅适用于可执行文件,还适用于目标文件、共享库等多种类型的文件。本文档旨在深入探讨ELF文件格式的具体细节,并为开发者提供一份详尽的技术参考。 #### 二、对象文件 ##### 1. 引言 对象文件是程序编译...

    可执行文件动态链接分析

    在现代操作系统中,特别是Linux环境下,可执行文件经常依赖于动态链接库。这种技术允许程序在运行时加载所需的库,从而减少内存占用并提高资源利用率。ELF(Executable and Linkable Format)是Linux系统中最常见的...

    window下共享linux文件工具

    在使用WinSCP共享Linux文件时,首先需要在Linux服务器上安装SSH服务,如OpenSSH。然后,在Windows上安装WinSCP,输入Linux服务器的IP地址、用户名和密码,建立连接。连接成功后,可以在两个文件管理器窗口之间拖拽...

    linux C库文件的建立和使用资料

    静态库在编译过程中与目标代码链接,生成的可执行文件包含库的所有代码,因此体积较大,但不需要运行时依赖库文件。 - **动态库 (.so)** 动态库在运行时被加载,编译时仅保存对库的引用。这使得多个程序可以共享...

    Linux平台gcc和动态共享库的基础知识

    而动态共享库(Dynamic Shared Object,简称DSO),则是在运行时可以被多个进程共享的库文件,通常以`.so`为扩展名。 #### GCC的编译工具用法 GCC提供了丰富的选项来控制编译过程。例如,`-o`参数用于指定输出...

    linux下编译.so库文件

    这意味着在程序运行时,静态库代码会被直接包含在可执行文件内,无需外部库支持。然而,这也导致了可执行文件体积的增大,且无法实现代码的重复利用。 - **动态库**:即共享对象,文件名通常为`.so`。它们在程序...

    linux静态库和动态库

    - **易于分发**:由于静态库已经集成到可执行文件中,所以分发时不需要额外的库文件。 - **兼容性好**:即使系统上的库版本发生变化,也不会影响已经静态链接好的程序。 然而,静态库也有其不足之处: - **占用...

    linux 动态库静态库

    静态库在编译时会被链接到目标程序中,形成一个完整的可执行文件,不依赖于系统中的动态库。静态库文件通常以`.a`为扩展名。创建静态库的流程与动态库类似,但不需要最后一步生成动态库。使用静态库的程序在运行时...

    可执行文件格式详解 Windows PE和Linux ELF

    可执行文件是操作系统可以直接加载和执行的二进制程序,它们包含了代码、数据以及运行时所需的元信息。在Windows和Linux这两个主流操作系统中,可执行文件遵循不同的格式标准:Windows平台使用Portable Executable ...

    UNIX/LINUX 平台可执行文件格式分析.doc

    在UNIX/Linux平台上,可执行文件格式对于理解和优化程序性能至关重要。本文主要探讨了三种主要的文件格式:a.out、COFF(Common Object File Format)和ELF(Executable and Linking Format)。下面将详细阐述这些...

    linux qt 动态链接库

    5. **运行时错误**:如出现`libqt5core.so.5: cannot open shared object file: No such file or directory`这样的错误,表明系统找不到相应的动态库。这通常是因为库未正确安装,或者库路径未配置好。 6. **调试...

    cximage静态库 动态库 64位linux版本

    这意味着程序体积可能会增大,但避免了运行时因找不到库文件而引发的问题。动态库(.so文件)则在运行时被加载,可以多个程序共享同一库,节省内存。但是,如果目标机器上缺少相应的动态库,程序将无法运行。 在64...

    Labview生成可执行文件exe,生成安装文件傻瓜教程

    本文将详细介绍如何通过LabVIEW生成可执行文件,并创建安装文件,以便让程序能够在没有安装LabVIEW环境的目标机器上运行。 #### 二、生成可执行文件(EXE) 1. **准备工作** - 操作系统支持:Windows 2000/NT/ME/...

    linux动态链接库的开发实例

    1. 链接阶段:在编译可执行文件时,通过`-l`参数指定库名(不带`lib`和`.so`),如`-lmylib`,告诉编译器使用这个库。同时,使用`-L`参数指定库的搜索路径,如果库不在默认路径中。 2. 运行阶段:在运行程序时,如果...

    关于在Linux平台上接静态库和共享库的使方法.docx

    2. 在编译时只引用库中相应函数的二进制映像代码的入口地址(不直接拷贝),该程序在运行时从共享库文件中读出该函数代码(这需要首先将共享库加载到内存中),从而间接引用,这种库我们称之为共享库,在 Linux 中,以 ...

    labelme win10可执行文件包

    在Win10系统中运行"LabelMe"可执行文件包,首先需要下载并解压提供的"LabelMe_win10"压缩文件。这个压缩包内包含所有必要的文件和资源,使用户能够在Windows 10操作系统上直接启动该工具,无需复杂的安装过程。解压...

    robot 3d 可执行文件

    在IT领域,"robot 3d 可执行文件"是一个涉及到计算机图形学、软件工程以及机器人模拟技术的主题。从标题和描述中我们可以提取出几个关键的知识点: 1. **Robot 3D**: 这通常指的是在三维环境中模拟或展示机器人的...

Global site tag (gtag.js) - Google Analytics