C语言学习笔记 库文件

概述

在C语言中,库分为静态库(.a)和动态库(.dll或.so)。
调用静态库时,编译器会把库文件编译到可执行文件(.exe)里;
调用动态库时,编译器不会把库文件编译到可执行文件(.exe)里,需要同可执行文件放到同一目录,程序运行时才会调用。

生成静态库及应用

  • 在工作区,按住shift右击选择:在此处打开命令窗口,创建项目目录:
mkdir test_create_libs
cd test_create_libs
  • 创建程序入口文件:
    ···
    notepad main.c
    ···

  • 写入:
    ···
    #include <stdio.h>
    int main(int arg,char *argv[])
    {
    printf(“Hello World!”);
    return 0;
    }
    ···

  • 创建运行脚本:
    ···
    notepad run.cmd
    ···
    写入:

gcc -o main main.c
main
pause

*** 到此,双击notepad run.cmd就得到了一个 Hello World。

  • 创建一个测试用的头文件:
mkdir include
notepad include/mylib.h

写入:

#if !defined(MYLIB_H)
#define MYLIB_H

void mylib_print();

#endif // MYLIB_H

创建一个实现的源文件:
···
mkdir src
notepad src/mylib.c
···
写入:

#include "../include/mylib.h"
#include <stdio.h>

void mylib_print(){
    printf("Hello @ mylib");
}

修改入口文件:
···
notepad main.c
···

修改为:
···
#include <stdio.h>
#include “include/mylib.h”

int (int arg,char *argv[])
{
printf(“Hello World @main.c\n”);
mylib_print();
return 0;
}
···

  • 键入命令调试:
    ···
    gcc -o main main.c src/mylib.c
    main
    ···
    *** 到此,就得到了一个调用其他源文件的程序。

*** #include “…/include/mylib.h” 双引号表示引入本项目的头文件;
#include <stdio.h> 尖括号表示引入编译器里的头文件,可以把第三方的头文件和库文件分别复制到编译器里的include和lib文件夹,伪装成编译器的标准头文件。

  • 将C源文件编译为对象文件。使用 -c 选项告诉GCC只编译不链接。
gcc -c -fPIC src/mylib.c -o mylib.o
  • 使用 ar 命令将对象文件打包成静态库。
ar rcs libmylib.a mylib.o
  • 编译时链接库,而不是src/mylib.c。
gcc -o main main.c -L. -lmylib 
  • 键入命令调试:
    ···
    main
    ···

*** 到此,就得到了一个调用其他静态库的程序。

*** libmylib.a要同mylib.h一起使用,并且要在源代码中引入:

#include "mylib.h"

*** 这里 -L. 表示在当前目录(.)中查找库,-lmylib告诉链接器链接libmylib.a(注意在 -l 选项中省略了 lib 前缀和 .a 后缀)
等同于:

gcc -o main main.c -L. libmylib.a

生成动态库及应用

在Windows上:

编译源文件为DLL

gcc -shared -o libmydll.dll src/mylib.c

在Unix-like系统上:

编译源文件为共享对象

gcc -shared -fPIC -o libmydll.so src/mylib.c
  • 键入命令调试:
    ···
    gcc -o main main.c -L. -lmydll
    main
    ···

*** 到此,就得到了一个调用其他动态库的程序。

*** 动态库文件需要同可执行文件放到同一目录。

相关推荐

  1. C语言学习笔记 文件

    2024-06-09 09:24:03       9 阅读
  2. C语言学习笔记

    2024-06-09 09:24:03       27 阅读
  3. C语言学习笔记

    2024-06-09 09:24:03       17 阅读
  4. C语言学习笔记

    2024-06-09 09:24:03       16 阅读
  5. 00_C语言学习笔记

    2024-06-09 09:24:03       32 阅读
  6. C语言学习笔记

    2024-06-09 09:24:03       16 阅读
  7. C语言学习笔记(二)

    2024-06-09 09:24:03       12 阅读
  8. C语言从头学05——头文件文件

    2024-06-09 09:24:03       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-09 09:24:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-09 09:24:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-09 09:24:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-09 09:24:03       20 阅读

热门阅读

  1. 使用uniapp的canvas制作签名组件

    2024-06-09 09:24:03       11 阅读
  2. linux cron 执行url

    2024-06-09 09:24:03       7 阅读
  3. Linux Swap Cache

    2024-06-09 09:24:03       8 阅读
  4. QUAST安装及使用(Bioinformatics工具-022)

    2024-06-09 09:24:03       8 阅读
  5. c++【入门】求梯形的面积

    2024-06-09 09:24:03       11 阅读
  6. 360数字安全:2024年2月勒索软件流行态势分析报告

    2024-06-09 09:24:03       7 阅读
  7. 我更看好开源大模型的发展前景

    2024-06-09 09:24:03       9 阅读
  8. 云上小知识:企业选择云服务的小Tips

    2024-06-09 09:24:03       9 阅读
  9. Oracle Streams XStreams?

    2024-06-09 09:24:03       8 阅读
  10. 沪深历史行情下载,金融数据库查询

    2024-06-09 09:24:03       7 阅读
  11. TalkingData数据统计:洞察与应用

    2024-06-09 09:24:03       14 阅读
  12. gorse修改开源项目后,如何使用Docker compose发布

    2024-06-09 09:24:03       9 阅读