zoukankan      html  css  js  c++  java
  • 动态库

    动态与静态函数库

    当前的Linux大多是将函数库做成动态函数库

    内存的访问速度是硬盘的好几倍,如果将常用的动态函数库加载到内存中(高速缓存
    ,cache),当软件套件要采用动态函数库时,就不需要重新从硬盘里读出,这样就>可以提高动态函数库的读取速度。这个时候需要ldconfig与 /etc/ld.so.conf的帮助
    。将动态函数库加载到高速缓存(cache)中的过程如下:

    1 将要写入高速缓存的动态方函数库所在的目录添加到: /etc/ld.so.conf
    2 利用ldconfig执行文件将/etc/ls.so.conf读如高速缓存中
    3 同时在/etc/ld.so.cache 文件中记录

    添加mysql函数库
    /usr/lib/mysql

    函数库是由系统建立的且有一定功能的函数集合

    但是库中对应的函数的源代码一般是不可见的,而对应的头文件中可以看到它的对外接口(函数原型)。

    Linux中标准的C函数库放置在/usr/lib下,以文件形式存放。用户也可以根据自己的所需建立自己的用户函数库。函数库分为静态库(.a)和共享库(.so,ShareObj),共享库在windows环境也叫动态链接库(.dll)。

    静态库是一些.o目标文件的集合,一般以.a形式结尾。。静态库在程序链接阶段使用,链接器将程序要用到的函数从库中提取出来,并整合到程序中,程序运行不再使用静态库了。

    ar rcs lib库文件名.a 目标文件1 目标文件2.。。
    r: 将.o文件加入静态库
    c 创建静态库
    s 产生索引

    mkdir bin inlcude obj src lib
    创建静态库
    方法一:
    gcc -o obj/*.o -c src/*.c
    ar rcs lib/libfile.a obj/*.o

    方法2:

    ar rcs lib/libfile.a src/*.c

    使用:

    gcc -o 可执行文件 调用者的C源文件.c -Ldir -l库文件名

    gcc -o obj/main.o -c src/main.c
    gcc -o exe main.o -Ldir -lfile

    -Ldir path
    -lname 库目录文件


    删除库文件不会影响可执行程序

    gcc -o bin/mymathfun_test src/mymath_test.c -Iinclude -Llib -lmymathfun
    共享库即动态链接库,在linux中以.so(share object)为后缀,在windows中以.dll为后缀。程序开始启动运行时,加载所需的函数,程序运行时也需要共享库的支持。共享库链接出来的文件比静态库要小得多。Linux中所有标准的共享库存放在/usr/lib目录中。

    gcc -shared -fPCI -o lib库文件名.so 目标文件1,目标文件2,...,目标文件n

    -fpci或-fPCI:表示创建产生独立目标代码,具体应用取决于平台;


    运行可执行文件提示找汪以库文件的解决方案
    sudo cp libmymathfun2.so /usr/lib
    export LD_LIBRARY_PATH=库文件目录
    删除静态库文件会影响到可执行文件的运行!(提示找不到库文件)


    export LD_LIBRARY_PATH=lib

    echo $LD_LIBRARY_PATH
    // -Iinclude 不要忘了
    gcc -o bin/mymathfun_test src/mymath_test.c src/mymathfun.c -Iinclude
    查看现实行号

    cat -n mymath_test.c

  • 相关阅读:
    resourceTree PuTTY/Plink
    error: src refspec 202110221_v1_master does not match any error: failed to push some refs to 'https://gitee.com/simadongyang/m9v1.0'
    go笔记10
    go协程池
    go笔记08
    go笔记06
    go笔记04
    go笔记03
    Git常用命令一
    ajax调用实例
  • 原文地址:https://www.cnblogs.com/countryboy666/p/11058448.html
Copyright © 2011-2022 走看看