zoukankan      html  css  js  c++  java
  • 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要大很多。

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

  • 相关阅读:
    1022. 从根到叶的二进制数之和
    剑指 Offer 54. 二叉搜索树的第k大节点
    枚举--百练2811--熄灯问题
    UVA 572 BFS 图论入门
    百练1088 DP+DFS 迷宫问题
    poj 1661 动态规划 拯救老鼠
    入坑动态规划!POJ 1458字符串最大公共子序列
    文件后缀批处理
    奇妙的算法--UVA 679(二叉树的编号)
    栈_uva514
  • 原文地址:https://www.cnblogs.com/JsonZhangAA/p/8798955.html
Copyright © 2011-2022 走看看