zoukankan      html  css  js  c++  java
  • linux c++ 加载动态库常用的三种方法

    链接库时的搜索路径顺序:LD_LIBRARY_PATH --> /etc/ld.so.conf --> /lib,/usr/lib

    方法1. vi .bash_profile
        设置环境变量LD_LIBRARY_PATH并导出

     

    另:

    LD_LIBRARY_PATH:启动时连接共享函数库,执行时打开动态函数库首先搜索的路径。

    LD_DEBUG:显示运行时的信息,如符号寻找和绑定,重定向,执行等等。

    方法2.  a)直接在/etc/ld.so.conf 里添加库路径

         b)新建文件,后缀为.conf,添加库路径信息,然后保存放到/etc/ld.so.conf.d/下

        

         最后执行ldconfig命令,重建/etc/ld.so.cache


        另:

    ldconfig -n 路径名:为指定路径下的函数库创建soname库,但不放入ld.so.cache文件。

    /etc/ld.so.conf:存放ldconfig运行时搜索的路径。

    /etc/ld.so.cache:存放ldconfig搜索到的库和soname。

    ld-linux.so:载入ELF文件用。可执行文件启动,启动时载入共享函数库都要用到这个库。

    libc.so:c语言支持库。

    libdl.so:动态连接库用。

     

      方法3使用rpath将库路径硬编码到可执行文件内部

    搜索路径分两种,一种是链接时候的搜索路径,一种是运行时期的搜索路径

    单个路径: -Wl,rpath /opt -L/opt -lddd      // 嵌入路径的同时,将库目录指定,使得链接时后面的libddd.so能被找到。

    多个路径: -Wl,rpath,/opt:../lib  -L/opt -L../lib  -lddd     //使用-Wl时,后面的参数之间不要有空格!!!

     

    查看生成文件的信息:   readelf -d demo(生成的文件)

    9.   Dynamic section at offset 0xc58 contains 26 entries:

    10.    Tag        Type                         Name/Value

    11.   0x0000000000000001 (NEEDED)             Shared library: [libtmp.so]

    12.   0x0000000000000001 (NEEDED)             Shared library: [libstdc++.so.6]

    13.   0x0000000000000001 (NEEDED)             Shared library: [libm.so.6]

    14.   0x0000000000000001 (NEEDED)             Shared library: [libgcc_s.so.1]

    15.   0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]

    16.   0x000000000000000f (RPATH)                 Library rpath: [/tmp/]

    17.   0x000000000000001d (RUNPATH)            Library runpath: [/tmp/]

    例子:

    CC = g++

     

    WORK_DIR =

    SRC_DIR = .

    OBJ_DIR = ../obj

    INC_DIR = ../include

    LIB_DIR = ../lib

    BIN_DIR = ../bin

     

    CFLAGS = -g -O -Wall -Wuninitialized

    CFLAGS += -I$(INC_DIR) -I$(INC_DIR)/test

     

    LDFLAGS += -Wl,-rpath,$(LIB_DIR)/test:$(LIB_DIR)/test2

    ...

    ...

    ...

    参考: 

    http://blog.chinaunix.net/uid-27105712-id-3313327.html

    http://www.myexception.cn/other/681660.html

    http://blog.csdn.net/defeattroy/article/details/6700616

    http://blog.csdn.net/russule/article/details/7057398

    http://blog.csdn.net/dbzhang800/article/details/6918413

     

  • 相关阅读:
    css3 rotate(1turn)的用法
    canvas svg webgl threejs d3js 的区别
    利用css3给座右铭设置漂亮的渐变色
    svg相关的知识
    Mark标记功能的实现(像手工标记的一样)
    终于搞清楚了正向代理与反向代理的区别
    获取免费ip_存入excel_用了线程池_封装清晰
    爬去京东——智能音箱
    滑动验证码
    天气爬取的笔记
  • 原文地址:https://www.cnblogs.com/foreverstars/p/4380038.html
Copyright © 2011-2022 走看看