zoukankan      html  css  js  c++  java
  • 共享库的使用(.so)文件

    1、共享库的概念

    2、创建共享库命令

    gcc -shared -fpci -o lib/libmath.so obj/mymath.o
    

    具体加不加 fpci 这个要看平台支持吧支持;具体详情可以查阅 shared的相关参数文档

    这里有一个-fPIC参数
    PIC就是position independent code
    PIC使.so文件的代码段变为真正意义上的共享
    如果不加-fPIC,则加载.so文件的代码段时,代码段引用的数据对象需要重定位, 重定位会修改代码段的内容,这就造成每个使用这个.so文件代码段的进程在内核里都会生成这个.so文件代码段的copy.每个copy都不一样,取决于 这个.so文件代码段和数据段内存映射的位置.

    3、使用共享库命令

    daokr@ubuntu:/mnt/hgfs/mystudy/clession$ gcc -shared -o lib/libmymath.so obj/mymath.o
    daokr@ubuntu:/mnt/hgfs/mystudy/clession$ gcc -o bin/mymath_test2008 obj/mymath_test.o -Llib -lmymath
    daokr@ubuntu:/mnt/hgfs/mystudy/clession$ ./bin/mymath_test2008 
    ./bin/mymath_test2008: error while loading shared libraries: libmymath.so: cannot open shared object file: No such file or directory
    daokr@ubuntu:/mnt/hgfs/mystudy/clession$
    daokr@ubuntu:/mnt/hgfs/mystudy/clession$ sudo cp lib/libmymath.so /usr/lib
    daokr@ubuntu:/mnt/hgfs/mystudy/clession$ ./bin/mymath_test2008

    注意:  

    这样中直接回报错;说是不能够去打开这个共享库文件;两种方式解决这个错误

    1)cp libmymath.so /usr/lib (需要root用户)

    2)export LD_LIBRARY_PATH=库文件的目录 (这个是临时的;在开个窗口就没啥用了;执行的

    ./bin/mymath_test2008 不会被执行

  • 相关阅读:
    Parquet文件结构笔记
    parquet 简介
    Kubernetes 路由问题&网络问题
    postgresql:terminate hung query
    Python 动态加载并下载"梨视频"短视频
    Python 豆瓣mv爬取
    Ubuntu 硬盘分区只读,重新挂载为读写分区之后,文件依然创建出错
    Ubuntu 装机软件
    iTOP4412开发板相关内容
    linux driver ------ GPIO的驱动编写和调用
  • 原文地址:https://www.cnblogs.com/wanglijun/p/8637592.html
Copyright © 2011-2022 走看看