• gcc库链接


    转载于https://blog.csdn.net/zhangdaisylove/article/details/45721667

    1.库的分类

    库有静态库和动态库,linux下静态库为.a,动态库为.so。windows下静态库为.lib,动态库为.dll。

    静态库是在编译的链接阶段链接嵌入到程序中。因此链接了静态库的程序之后与静态库没有了关系,你如果更新了静态库,使用静态库的程序需要重新链接。

    动态库在在运行阶段加载的,不会链接到使用动态库的程序中。有点是一旦修改了动态库,所有使用动态库的程序都会自动加载,无需再次编译。

    2.库的生成

    下面命令在linux环境下执行,以test.c举例

    动态库的生成

    gcc -share test.c -o libtest.so

    静态库的生成

    由于静态库是在链接阶段链接的,因此静态库实际上就是编译阶段的.o目标文件的归档文件

    gcc -c test.c会生成test.o

    ar -r libtest.a test.o

    可以将多个.o文件打包到一个库中

    3.库的加载

    gcc默认会在/lib 和/user/lib下查找库

    比如test.c会使用到加密库中的函数

    gcc test.c -lcrypto -o test

    gcc会自动到/lib和/usr/lib路径下查找libcrypto.a或者libcrypto.so

    当库不在/lib和 /usr/lib路径下时,需要手动指定库链接

    可以使用-L,比如在当前路径下查找库

    gcc test.c -L. -lcrypto -o test

    另外程序链接库时如果没有使用-static选项,一般会优先使用动态库。

    要加载静态库需要使用-static选项

    gcc test.c -lcrypto -static -o teststatic

    明显可以看到teststatic比test要大很多。

    因为静态库会链接到程序中。

  • 相关阅读:
    给webstorm换个背景图
    css遮罩 mask属性
    svg图标
    BFC原理
    轮播图与图片查看器
    超大分辨率屏幕适配方案
    移动端适配-动态计算rem
    [Intervention] Unable to preventDefault inside passive event listener due to target being treated as passive. 报错
    由于ie浏览器ajax缓存 导致layui table表格重载失败的解决办法
    实现线程操作的三种方法
  • 原文地址:https://www.cnblogs.com/JsonZhangAA/p/8798955.html
Copyright © 2020-2023  润新知