zoukankan      html  css  js  c++  java
  • linux下静态库与动态库

    linux C/C++ 编译静态库.a 或者动态库.so

    无论是静态库还是动态库,只是函数调用的时间不一样,编译的话都需要相应的目标文件

    所以

    例如有 a.c b.c 为依赖文件,c.c中调用a.c b.c中的函数

    1、生成目标文件

      C语言的话用gcc

       gcc -c a.c b.c

      C++用g++

      g++ -c a.c b.c

    这样生成了 a.o b.o

    2、生成库文件

      1)静态库.a

      对于静态库归类为文档 (archive)

      所以用ar -r 来实现

      ar -r libc.a a.o b.o

      这样就利用a.o b.o 产生了静态库文件libc.a

      2)动态库

      gcc -fpic -shared  a.o b.o -o libc.so

    关于库文件的命名一般以lib+名字+.o/.so

    这是因为在调用的时候只需以 -l+名字调用就可以了 

    同理对与c++来讲,调用g++就可以了。

    3、库文件的使用

      1)静态库的使用

      gcc  c.c -lc -L ./ -o c

        -L 指定静态库的路径  ,不然会报路径存在错误。

     2)动态库的使用

      gcc  c.c -lc -L ./ -o c

      但是动态库报了下面的错误,查找相应文档提示,linux下不会自动连接当前文件夹,所以用 export LD_LIBRARY_PATH=./ 指定一下路径即可

    ./hello: error while loading shared libraries: libhello.so: cannot open shared object file: No such file or directory

    export LD_LIBRARY_PATH=./

    题外话:

      gcc与g++的区别

      编译一般分为编译和链接

    对于c和c++的编译阶段都是一样的,g++也是调用的gcc来执行的,不信的话可以自己找些资料看一下

    在链接的阶段,g++也是使用gcc链接了一些c++的标准链接库。 -lstdc++

  • 相关阅读:
    MongoDB面试题
    spider 爬虫文件基本参数(3)
    命令行工具(2)
    初始scrapy,简单项目创建和CSS选择器,xpath选择器(1)
    数据分析实例(离海洋距离与最高温度之间的关系分析)
    路飞业务分析
    MYSQL 主从复制,读写分离(8)
    pyquery 学习
    selenium case报错重新执行
    python小技巧
  • 原文地址:https://www.cnblogs.com/lobsterIT/p/5654118.html
Copyright © 2011-2022 走看看