linux学习 建立静态库,动态库,写简单的makefile

linux学习 建立静态库,动态库,写简单的makefile

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

建立静态库
建立四个文件 bin(可运行文件),lib(库),include(头文件),src(放源文件)

这里的起的库明为add

在src文件里运行

1)gcc -c add.c //编译add.c源文件生成add.o目标文件
2)ar crsv ../lib/ libadd.a add.o //对目标文件*.o进行归档,生成lib*.a, 把这个生成文件放在lib里
3)gcc -o main main.c -L(大些的爱偶,放库的路径)../lib   –l(小写的爱偶,库名为add) add –I(大写的i) ../include(放头文件) 

建立动态库
gcc -fPIC  -c add.c ../include(放头文件) 生成add.o目标文件
gcc -shared -o libadd.so add.o 生成libadd.so动态库 这个库的名是add
将这个库放在根文件夹的lib文件中
gcc -o main main.c –l add ../include(放头文件) (注意这里写的库名,没有lib和.so)


动态库与静态库比較:

动态库仅仅在运行的时候才被链接使用

动态库能够被多个程序使用,所以也称共享库

静态库将会整合大程序中,程序运行是不用夹在静态库,因此静态库会是程序臃肿难以升级,但比較easy部署

动态库便于升级,但不easy部署


使用makefile 

三个文件 bin(可运行文件),include(头文件),src(放源文件)

目标项               依赖项
./bin/main:./src/my_add.o ./src/my_minus.o ./src/main.o    //将*.o文件 生成可运行文件
g++  ./src/my_add.o ./src/my_minus.o ./src/main.o -o ./bin/main -I ./include
./src/my_add.o:./src/my_add.cpp
g++ -c ./src/my_add.cpp -o ./src/my_add.o -I ./include // 生成my_add.o
./src/my_minus.o:./src/my_minus.cpp
g++ -c ./src/my_minus.cpp -o ./src/my_minus.o -I ./include //生成my_minus.o
./src/main.o:./src/main.cpp
g++ -c ./src/main.cpp -o ./src/main.o -I ./include   //生成main.o

简洁版

建立简单的makefile

1)vim makefile

2)main.exe:main.cpp

g++ $^ -o $@

3)make

$@为目标项,$^为依赖项

当makefile比較多的时候

make -f make.my_read 选定特定的make.my_read运行

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118585.html原文链接:https://javaforall.net

(0)
上一篇 2021年12月4日 上午8:00
下一篇 2021年12月4日 上午8:00


相关推荐

  • 错误代码0xc0000005是什么错误_错误状态0xc0000006

    错误代码0xc0000005是什么错误_错误状态0xc0000006在使用电脑过程中经常会出现某些错误代码,如0xc0000005错误故障,造成电脑无法正常运行,这要怎么办呢?今天小编和大家分享电脑出现0xc0000005错误代码的解决方法。具体方法如下:1、首先按下“win+r”打开运行,输入regedit按下回车。2、随后依次定位到:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Exp…

    2026年4月15日
    5
  • quantile函数r语言_R中的Quantile()函数-简要指南

    quantile函数r语言_R中的Quantile()函数-简要指南quantile 函数 r 语言 Youcangenera functioninR 您可以使用 R 中的 Quantile 函数生成样本分位数 Hellopeople todaywewillb

    2026年3月17日
    2
  • DAO层,Service层,Controller层、View层

    DAO层,Service层,Controller层、View层DAO 层 DAO 层主要是做数据持久层的工作 负责与数据库进行联络的一些任务都封装在此 DAO 层的设计首先是设计 DAO 的接口 然后在 Spring 的配置文件中定义此接口的实现类 然后就可在模块中调用此接口来进行数据业务的处理 而不用关心此接口的具体实现类是哪个类 显得结构非常清晰 DAO 层的数据源配置 以及有关数据库连接的参数都在 Spring 的配置文件中进行配置 nbsp nbsp nbsp nbsp Service 层 Service 层主要负责业务模块的逻辑应用设计 同样是首先设计接口 再设计其实现的类 接着再 Spring 的配置文件中配

    2025年6月9日
    4
  • Qt获得焦点和失去焦点处理事件 (Focus事件)

    Qt获得焦点和失去焦点处理事件 (Focus事件)方法一:描述:一开始我要实现的目的就是,在一个窗体上有多个可编辑控件(比如QLineEdit、QTextEdit等),当哪个控件获得焦点,哪个控件的背景就高亮用来起提示作用,查了下文档应该用focusInEvent()和focusOutEvent(),在实际过程中,我犯了十分严重的错误,最开始的时候我是这样做的:我重写了窗体QWidget的这两个函数,然后再在函数体中把QFocusEve

    2022年6月15日
    174
  • 毕业——少年,你还太弱,请专心练剑

    有段时间没有更新博客,一是比较忙,二是考虑自己的博客内容。之前的博客都是自己的学习记录,输入的同时做了输出,自己思考了一下主要就是以下几类:1、一些比较常见的知识点,像这些都是本来就已经存在的内容,我只是做了一次梳理按照我的逻辑整理出来,就算我不整理,也能找的到,所以我觉得存在的必要性并不大。2、错误记录,自己学习和开发过程中遇到的各种问题,对于遇到类似问题的同学可能有所帮助。3、自己的经验总结,这

    2022年3月11日
    54
  • 什么是WBS分解法?

    什么是WBS分解法?WBS 分解法实际应用场景繁多

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号