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++

  • 相关阅读:
    python操作Excel读写--使用xlrd
    python 使用pymssql连接sql server数据库
    python pdb调试
    sqlser生成guid与复制造数
    sqlser游标与for循环
    bat写循环
    Jenkins配置多任务
    git命令行与Jenkins
    Jenkins执行python脚本
    Windows环境Jenkins配置免密登录Linux
  • 原文地址:https://www.cnblogs.com/lobsterIT/p/5654118.html
Copyright © 2011-2022 走看看