`
thank55789
  • 浏览: 29500 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ldconfig及 LD_LIBRARY_PATH

阅读更多
1. 往/lib和/usr/lib里面加东西,是不用修改/etc/ld.so.conf的,但是完了之后要调一下ldconfig,不然这个library会找不到

2. 想往上面两个目录以外加东西的时候,一定要修改/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才能在程 序运行时被找到。

3. 如果想在这两个目录以外放lib,但是又不想在/etc/ld.so.conf中加东西(或者是没有权限加东西)。那也可以,就是export一个全局变 量LD_LIBRARY_PATH,然后运行程序的时候就会去这个目录中找library。一般来讲这只是一种临时的解决方案,在没有权限或临时需要的时 候使用。

4. ldconfig做的这些东西都与运行程序时有关,跟编译时一点关系都没有。编译的时候还是该加-L就得加,不要混淆了。

5. 总之,就是不管做了什么关于library的变动后,最好都ldconfig一下,不然会出现一些意想不到的结果。不会花太多的时间,但是会省很多的事。

Linux支持共享库已经有悠久的历史了,不再是什么新概念了。大家都知道如何编译、连接以及动态加载(dlopen/dlsym/dlclose) 共享库。但是,可能很多人,甚至包括一些高手,对共享库相关的一些环境变量认识模糊。当然,不知道这些环境变量,也可以用共享库,但是,若知道它们,可能就会用得更好。下面介绍一些常用的环境变量,希望对家有所帮助: LD_LIBRARY_PATH 这个环境变量是大家最为熟悉的,它告诉loader:在哪些目录中可以找到共享库。可以设置多个搜索目录,这些目录之间用冒号分隔开。在linux下,还提供了另外一种方式来完成同样的功能,你可以把这些目录加到/etc/ld.so.conf中,或则在/etc/ld.so.conf.d里创建一个文件,把目录加到这个文件里。当然,这是系统范围内全局有效的,而环境变量只对当前shell有效。按照惯例,除非你用上述方式指明,loader是不会在当前目录下去找共享库的,正如shell不会在当前目前找可执行文件一样。 LD_PRELOAD 这个环境变量对于程序员来说,也是特别有用的。它告诉loader:在解析函数地址时,优先使用LD_PRELOAD里指定的共享库中的函数。这为调试提供了方便,比如,对于C/C++程序来说,内存错误最难解决了。常见的做法就是重载malloc系列函数,但那样做要求重新编译程序,比较麻烦。使用LD_PRELOAD机制,就不用重新编译了,把包装函数库编译成共享库,并在LD_PRELOAD加入该共享库的名称,这些包装函数就会自动被调用了。在linux下,还提供了另外一种方式来完成同样的功能,你可以把要优先加载的共享库的文件名写在/etc/ld.so.preload里。当然,这是系统范围内全局有效的,而环境变量只对当前shell有效。 LD_ DEBUG 这个环境变量比较好玩,有时使用它,可以帮助你查找出一些共享库的疑难杂症(比如同名函数引起的问题)。同时,利用它,你也可以学到一些共享库加载过程的知识。它的参数如下: libs display library search paths reloc display relocation processing files display progress for input file symbols display symbol table processing bindings display information about symbol binding versions display version dependencies all all previous options combined statistics display relocation statistics unused determined unused DSOs help display this help message and exit BIND_NOW 这个环境变量与dlopen中的flag的意义是一致,只是dlopen中的flag适用于显示加载的情况,而BIND_NOW/BIND_NOT适用于隐式加载。 LD_PROFILE/LD_PROFILE_OUTPUT:为指定的共享库产生profile数据,LD_PROFILE指定共享库的名称,LD_PROFILE_OUTPUT指定输出profile文件的位置,是一个目录,且必须存在,默认的目录为/var/tmp/或/var/profile。通过profile数据,你可以得到一些该共享库中函数的使用统计信息。

分享到:
评论

相关推荐

    GStreamer1.6.0一键编译安装脚本文档

    export LD_LIBRARY_PATH=$HOME/gst_1.6.0/out/lib/:$LD_LIBRARY_PATH ``` - **`WORK_DIR`** 变量记录当前的工作目录。 - **`LD_LIBRARY_PATH`** 环境变量被设置为包含自定义库路径 `$HOME/gst_1.6.0/out/lib/` 的值...

    ubantu16下的oracle12.1 client安装文件

    官网下载使用alien 转换...export LD_LIBRARY_PATH=/usr/lib/oracle/12.2/client64/lib:$LD_LIBRARY_PATH sudo mkdir -p /usr/lib/oracle/12.2/client64/lib/network/admin tnsnames.ora, sqlnet.ora or oraaccess.xml

    linux 查看程序运行找不到库的问题(设置环境变量)

    在Linux系统中,尤其是Ubuntu这样的基于Debian的...这通常涉及设置或调整`LD_LIBRARY_PATH`环境变量,以及可能的`ldconfig`配置。理解这些机制并熟练操作,将有助于在Ubuntu或其他Linux系统中有效地管理和调试程序。

    库搜索路径 库搜索路径

    export LD_LIBRARY_PATH=/path/to/library:$LD_LIBRARY_PATH ``` 这行命令会在原有值的基础上添加一个新的搜索路径。需要注意的是,这种方式只对当前用户的当前会话有效。 #### 五、配置文件/etc/ld.so.conf 管理...

    linux全志R16的linux系统编译的资料_20170502_1655.7z

    全志R16平台编译linux系统V1.0.txt 2017/4/11 13:36 (编译请使用编译android的lichee的选项编译生成的.config文件,不然直接编译会报错!!...rootroot@cm-System-Product-Name:/home/wwt/linux_r16$ tar zxvf ...

    Linux下使用Java调用Hikvision设备网络SDK的使用指南.pdf

    - readme.txt文件:包含了设置环境变量的指导,即设置LD_LIBRARY_PATH环境变量,以便在系统中加载动态库。 4. 设置LD_LIBRARY_PATH环境变量的方法: - 直接在终端输入export命令,临时修改环境变量。 - 修改用户...

    cuda-sys:Rust绑定到CUDA API

    您需要将其添加到ld路径LD_LIBRARY_PATH=/usr/local/cuda/lib64/stubs或使用ldconfig 。 CUDA_LIBRARY_PATH环境变量 如果使用系统安装程序(例如apt , yum , pacman等),则安装路径可能不同。 $CUDA_LIBRARY_...

    在Linux中创建静态库和动态库

    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:. gcc -o hello main.c -L. -lmyhello ``` 执行程序时可能会遇到以下错误: ```bash ./hello: error while loading shared libraries: libmyhello.so: cannot open ...

    头文件包含及库的链接路径问题

    export LD_LIBRARY_PATH=自定义路径:$LD_LIBRARY_PATH # 静态链接库搜索路径 export LIBRARY_PATH=自定义路径:$LIBRARY_PATH ``` 这些环境变量同样可以在命令行中临时设置或在系统启动脚本中永久设置。 - *...

    Linux程序运行时加载动态库失败的解决方法

    export LD_LIBRARY_PATH=/path/to/library:$LD_LIBRARY_PATH ``` - 这种方法仅对当前会话有效,重启终端后需重新设置。 此外,如果程序需要的库文件版本低于系统中存在的库版本,可以创建符号链接指向旧版本的库...

    Linux动态库.txt

    如果 `libstr_out.so` 不在默认路径中,还需要配置 `LD_LIBRARY_PATH` 或修改 `/etc/ld.so.conf` 并执行 `/sbin/ldconfig`。 通过以上步骤,我们可以成功地创建和使用一个简单的动态库。这种做法不仅适用于开发...

    在Fedora 14下安装OpenCV

    LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib export LD_LIBRARY_PATH PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH export PKG_CONFIG_PATH 然后,更新库缓存和环境变量: # ldconfig $ ...

    Qt编程入门(1).pdf

    setenv LD_LIBRARY_PATH $QTDIR/lib:$LD_LIBRARY_PATH ``` 完成配置后,需要重新登录或重新加载配置文件,确保环境变量设置生效。 ##### 3.4 安装许可证文件 对于GPL版本的Qt,无需安装许可证文件。而对于专业版...

    从源码编译安装.txt

    此时需要指定 `--prefix` 参数来更改安装路径,或者将库文件所在的目录添加到 `LD_LIBRARY_PATH` 或 `PKG_CONFIG_PATH` 中。 - 示例:在安装 glib 时使用 `--prefix=/usr` 来确保其安装在 `/usr` 目录下。 2. **...

    Linux编程动态库知识

    暂时添加动态库目录LD_LIBRARY_PATH,一般用于测试和开发  4.LD_PRELOAD预加载库。用于提前加载,紧急用途,或是特殊的测试情况  5.创建动态库  gcc -fPIC -shared -Wl,-soname, your_soname -o library_...

    linux创建和使用动态链接库.so文件

    - 如果需要,可以通过 `ldconfig` 更新链接器缓存或使用 `LD_LIBRARY_PATH` 环境变量来解决库文件的路径问题。 通过以上步骤,你已经掌握了如何在 Linux 下创建和使用动态链接库 `.so` 文件的基本方法。这些技能...

    libmysqlclient.so.zip

    4. **运行时链接**:如果程序已经编译完成,但运行时找不到库,可以使用`LD_LIBRARY_PATH`环境变量临时指定库的搜索路径,例如:“export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/library”。 5. **检查版本...

    ffmpeg安装配置以及测试

    `export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/ffmpeg/lib` 然后,执行以下命令使环境变量生效: `source /etc/profile` 3. 解决依赖项问题 如果出现 `error while loading shared libraries: ...

    oracle客户端在linux下安装部署运行

    这将设置 LD_LIBRARY_PATH 变量,以便于 Oracle 客户端找到相应的库文件。 2.2 配置 TNS_ADMIN 变量 然后,需要编辑 ~/.bashrc 文件,并添加以下内容: export ORACLE_HOME=/usr/lib/oracle/11.2 export TNS_...

Global site tag (gtag.js) - Google Analytics