建立静态库
建立四个文件 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)

动态库与静态库比较:

动态库只在执行的时候才被链接使用

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

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

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

使用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执行

linux学习 建立静态库,动态库,写简单的makefile相关推荐

  1. Linux学习---静态库 动态库

    今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻.在这之前,我们需要了解一下源代码到可执行程序之间到底发生了什么神奇而美妙的事情. 在Linux操作系统中,普遍使用E ...

  2. C/C++ 跨平台交叉编译、静态库/动态库编译、MinGW、Cygwin、CodeBlocks使用原理及链接参数选项

    0. 引言 UNIX是一个注册商标,是要满足一大堆条件并且支付可观费用才能够被授权使用的一个操作系统.linux是unix的克隆版本,是由其创始人Linus和诸多世界知名的黑客手工打造的一个操作系统. ...

  3. Linux-(C/C++)生成并使用静态库/动态库

    静态库/动态库概要 在Windows下静态库的后缀为:.lib.动态库后缀为:.dll:而在Linux下静态库的后缀为:.a.动态库的后缀为:.so. 那么什么是静态库呢? 首先我们来看看程序编译的大 ...

  4. 软件库Library之静态库\动态库和静态加载\动态加载

    软件库Library之静态库\动态库和静态加载\动态加载 动态库之导入库 https://blog.csdn.net/wallaceli1981/article/details/5740718 * 动 ...

  5. NDK01-打包静态库 动态库在mk和cmake环境配置使用

    动态库和静态库 动态库: libxxx.so 运行的时候,才会去加载,加载一次就在内存中存在副本,其他地方使用就都是公用的.使用场景就是 高德百度sdk对外开房 静态库: libxxx.a 编译期把静 ...

  6. 如何让linux加载当前目录的动态库

    debian从7.0开始支持multiarch,64位库的路径改到/usr/lib/x86_64-linux-gnu了,mint.ubuntu这些衍生版有没有跟着改我就不清楚了. deepin lin ...

  7. 【Android NDK 开发】Visual Studio 2019 使用 CMake 开发 JNI 动态库 ( 动态库编译配置 | JNI 头文件导入 | JNI 方法命名规范 )

    文章目录 I . JNI 与 NDK 区别 II . Visual Studio 编译动态库 III. 配置 导入 jni.h 头文件 IV . IntelliJ IDEA Community Edi ...

  8. 【Android NDK 开发】Android.mk 配置动态库 ( Android Studio 配置动态库 | 动态库加载版本限制 | 本章仅做参考推荐使用 CMake 配置动态库 )

    文章目录 I . Android Studio 中使用 Android.mk 配置动态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...

  9. Linux学习:静态库和动态库

    1.库是什么? 将"源代码"变为"二进制格式的源代码"(作用:加密,别人可以用,但不知道其中的内容). 2.库制作出来之后,如何给用户使用? 需要给用户:头文件 ...

  10. linux系统应用学习(三)--- 动态库静态库

    动态库静态库 库文件:一般指第三方提供的可调用的库函数文件,库文件封存的是函数体,即.c文件里面的内容. 动态库      静态库 Windows下:        xx.dll            ...

最新文章

  1. C++11中std::bind的使用
  2. Beta 冲刺(6/7)
  3. “Info.plist” couldn’t be removed
  4. 今天一早来打开IDEA,全面飘红,所有的含有import语句的文件都会报错
  5. luogu P1659 [国家集训队]拉拉队排练
  6. c++归并排序_合并排序法
  7. 实用常识 | 将桌面文件移动到其他硬盘内
  8. 算法训练和模型部署如何避免多次重写数据预处理代码
  9. 随手练——打印折痕方向
  10. Java学习之==注释、数据类型、变量、运算符
  11. html文字段落加边框线,html边框样式 怎么用html给文字加边框的?
  12. ARM芯片内部堆栈的理解及MAP文件的查看
  13. 2022年国家高新企业认定申报最全问答-财务数据篇
  14. B3U3 Text A Language Focus 共32词
  15. 形参和实参的储存单元是否一致?
  16. 自制表情包!android,diy表情包制作软件下载-diy表情包 安卓版v2.6.0-PC6安卓网
  17. android 调用系统打印
  18. QGIS二次开发 数据编辑功能等
  19. cocos2d-2.1rc0-x-2.1.3运行libcurl返回CURLE_COULDNT_CONNECT(7)
  20. 第三部分 数据结构 -- 第四章 图论算法-1383:刻录光盘(cdrom)

热门文章

  1. javaScript的arguments传参数
  2. GNU make manual 翻译(五十二)
  3. 死锁问题------------------------INSERT ... ON DUPLICATE KEY UPDATE*(转)
  4. Python基础练习三超市存包柜模拟(优化)
  5. Linux新手必看:浅谈如何学习linux
  6. stata学习笔记(三):计算五年内的ROA标准差所用到的一些知识
  7. 机器学习基础:极大似然估计(Machine Learning Fundamentals: Maximum Likelihood Estimation)
  8. drawnow aviread
  9. python下pymysql的问题
  10. 急!Mac无法修复磁盘,应该怎么办? 看 这 里!