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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 用户使用报告_2020年抖音用户画像报告[附下载] | 行业数据报告研读[通俗易懂]

    用户使用报告_2020年抖音用户画像报告[附下载] | 行业数据报告研读[通俗易懂]▼ 更多专业报告,请关注我们 ▼▼有趣回顾:▼【小时光面馆】专一先生和善变小姐油烟情书甲壳虫的最后一英里关注公众号,后台发送关键词“2020抖音用户画像”即可获取完整版PDF报告!报告摘要本篇报告针对的是18岁以上使用抖音行为的人群,对此进行规模大小、具体属性分析、兴趣爱好的数据整理,大部分数据都采自2020年1月。抖音用户规模数据截止至2020年1月,抖音日…

    2022年6月12日
    35
  • Wireshark抓包实验[通俗易懂]

    Wireshark抓包实验[通俗易懂]Wireshark抓包实验1.1学习Wireshark工具的基本操作学习捕获选项的设置和使用,如考虑源主机和目的主机,正确设置CaptureFilter;捕获后设置DisplayFilter。1.2PING命令的网络包捕获分析PING命令是基于ICMP协议而工作的,发送4个包,正常返回四个包。以主机210.31.40.41为例,主要实验步骤为:(1)设置“捕获过滤”:在…

    2025年9月26日
    8
  • poj 4044 Score Sequence(暴力)

    poj 4044 Score Sequence(暴力)

    2021年12月4日
    39
  • 多标签分类(multilabel classification )

    多标签分类(multilabel classification )这几天看了几篇相关的文章,写篇文章总结一下,就像个小综述一样,文章会很乱  1、multilabelclassification的用途     多标签分类问题很常见,比如一部电影可以同时被分为动作片和犯罪片,一则新闻可以同时属于政治和法律,还有生物学中的基因功能预测问题,场景识别问题,疾病诊断等。 2.单标签分类     在传统的单标签分类中,训练

    2025年6月25日
    2
  • adb shell ps_ps alt+delete

    adb shell ps_ps alt+deleteRemove-adcomputer是一个删除计算机的命令,执行比较简单,执行格式如下:Remove-adcomputer-identityraymondpc

    2025年12月11日
    2
  • js中alert的用法_asp中验证控件怎么使用

    js中alert的用法_asp中验证控件怎么使用ASP.NET验证控件与Attributes.Add脚本并存现在在ASP.NET中,我们也要实现这样的方式就不那么简单了,因为页面验证我们可以采用ASP.NET中的validator控件,同时只要把button的causeValidator设为true就可以了

    2022年9月26日
    3

发表回复

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

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