zoukankan      html  css  js  c++  java
  • 链接过程

    问题

    工程中的每个c语言源文件被编译后生成目标文件,这些目标文件如何生成最终的可执行文件?

    链接器的意义

    链接器的主要作用是把各个模块之间相互引用的部分处理好,使得各个模块能够正确的衔接

    模块链接

    静态链接

    由链接器在链接时将库的内容直接加入到可执行程序中

    Linux下静态库的创建和使用

    • 编译静态库源码: gcc -c lib.c -o lib.o
    • 生成静态库文件: ar -q lib.a lib.o
    • 使用静态库编译:gcc main.c lib.a -o main.out

    例子1:静态库链接
    slib.c

    int add(int x,int y);
    

    main.c

    #include<stdio.h>
    extern int add(int x,int y);
    
    int main()
    {
    	int a = 2;
    	int b = 3;
    	int c = add(a,b);
    	printf("c = %d
    ",c);
    	return 0;
    }
    

    动态链接

    • 编译动态库源码: gcc -shared dlib.c -o dlib.so

    • 使用动态库编译: gcc main.c -ldl -o main.out

    • 关键系统调用

      • dlopen : 打开动态库文件
      • dlsym : 查找动态库中的函数并返回调用地址
      • dlclose: 关闭动态库文件

    小结

    • 链接是指将目标文件最终链接为可执行程序
    • 根据链接方式的不同,链接过程可以分为
      • 静态链接:目标文件直接链接进入可执行程序
      • 动态链接:在程序启动后才动态加载目标文件
  • 相关阅读:
    手机如何当电脑的摄像头使用
    内网穿透软件
    如何在laravel框架中使用阿里云的oss
    css position 定位详解
    laravel 速查表
    window10如何查看连接过的wifi密码
    sweetalert弹出层组件
    phpstudy安装 与phpstudy_Windows web面板安装
    程序员修炼之道读后感
    JAVA-WEB-简单的四则运算
  • 原文地址:https://www.cnblogs.com/yanyun888/p/9213098.html
Copyright © 2011-2022 走看看