gcc生成静态库.a和动态库.so以及Ubuntu下OpenCV使用

本文详细介绍了如何在Ubuntu系统下使用gcc生成静态库.a和动态库.so,以及如何在OpenCV环境中进行图片处理、视频播放和录制。通过创建并链接静态库和动态库,展示了它们在程序编译和运行时的区别。同时,文章还涵盖了OpenCV的安装配置及其使用示例,包括图片显示、视频播放和录制。

要求:

一.  学习并掌握可执行程序的编译、组装过程。学习任务如下:

1)阅读、理解和学习材料“用gcc生成静态库和动态库.pdf”和“静态库.a与.so库文件的生成与使用.pdf”,请在Linux系统(Ubuntu)下如实仿做一遍。

2)在第一次作业的程序代码基础进行改编,除了x2x函数之外,再扩展写一个x2y函数(功能自定),main函数代码将调用x2x和x2y ;将这3个函数分别写成单独的3个 .c文件,并用gcc分别编译为3个.o 目标文件;将x2x、x2y目标文件用 ar工具生成1个 .a 静态库文件, 然后用 gcc将 main函数的目标文件与此静态库文件进行链接,生成最终的可执行程序,记录文件的大小。

3)将x2x、x2y目标文件用 ar工具生成1个 .so 动态库文件, 然后用 gcc将 main函数的目标文件与此动态库文件进行链接,生成最终的可执行程序,记录文件的大小,并与之前做对比。

一、用gcc生成静态库和动态库

函数库分为静态库和动态库。

  • 静态库
    在程序编译时会被连接到目标代码中,程序运行是则不需要静态库的存在。
  • 动态库
    在程序编译时不会被连接到目标代码中,而是程序运行时载入的。
    两者区别:前者是编译连接的,后者是程序运行载入的。
  • 1.准备过程

    (1). 创建一个目录
    (2). hello代码
    hello.h

  • #ifndef HELLO_H
    #define HELLO_H
    void hello(const char *name);
    #endif//HELLO_H

    hello.c

  • #include<stdio.h>
    void hello(const char *name)
    {
    	printf("Hello %s\n",name);
    }
    

    main.c

  • #include"hello.h"
    int main()
    {
    	hello("everyone");
    	return 0;
    }

    (3). gcc编译得到.o文件
    gcc -c hello.c

  • 二、静态库使用

    (1)创建静态库
    创建静态库的工具:ar
    静态库文件命名规范:以lib作为前缀,是.a文件

  • 静态库使用

    (1)创建静态库
    创建静态库的工具:ar
    静态库文件命名规范:以lib作为前缀,是.a文件

  • ar -crv libmyhello.a hello.o

  • 生成main.o gcc -c main.c
    生成可执行文件 gcc -o hello main.c libmyhello.a 

  •  

    3.动态库的使用

    (1). 创建动态库
    创建动态库的工具:gcc
    动态库文件命名规范:以lib作为前缀,是.so文件

  • gcc -shared -fPIC -o libmyhello.so hello.o

  • 在程序中执行动态库

  • gcc -o hello main.c -L. -lmyhello或gcc main.c libmyhello.so -o hell 

  •  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值