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运行
linux学习 建立静态库,动态库,写简单的makefile的更多相关文章
- Linux 静态库&动态库调用
1.什么是库在windows平台和linux平台下都大量存在着库.本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.由于windows和linux的本质不同,因此二者库的二进制是不 ...
- linux静态与动态库创建及使用实例
一,gcc基础语法: 基本语法结构:(由以下四部分组成) gcc -o 可执行文件名 依赖文件集(*.c/*.o) 依赖库文件及其头文件集(由-I或-L与-l指明) gcc 依赖文件集(*.c/*.o ...
- Linux中创建和使用静态库&动态库
库本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行 Linux下库的种类 linux下的库有两种:静态库和共享库(动态库). 二者的不同点在于代码被载入的时刻不同. 静态库的代码在 ...
- C/C++ 跨平台交叉编译、静态库/动态库编译、MinGW、Cygwin、CodeBlocks使用原理及链接参数选项
目录 . 引言 . 交叉编译 . Cygwin简介 . 静态库编译及使用 . 动态库编译及使用 . MinGW简介 . CodeBlocks简介 0. 引言 UNIX是一个注册商标,是要满足一大堆条件 ...
- 静态库&动态库&导入库
我遇到的问题 先贴一个StackOverflow上的问题 上面的问题让我知道了更多动态库的知识. 我需要使用一个声音库(irrKlang)为2d游戏提供声音,我使用的编译器是mingw-w64,但是i ...
- 生成lua的静态库.动态库.lua.exe和luac.exe
前些日子准备学习下关于lua coroutine更为强大的功能,然而发现根据lua 5.1.4版本来运行一段代码的话也会导致 "lua: attempt to yield across me ...
- windows库的创建和使用:静态库+动态库
windows库的创建和使用:静态库+动态库 一.静态库的创建和使用 1. 静态库创建 (1)首先创建projecttest,測试代码例如以下: 1) test.h void test_print ...
- 如何让linux加载当前目录的动态库
debian从7.0开始支持multiarch,64位库的路径改到/usr/lib/x86_64-linux-gnu了,mint.ubuntu这些衍生版有没有跟着改我就不清楚了. deepin lin ...
- C++开发新版本vs使用旧版本vs编译的静态库动态库
关于vs潜在的升级问题概述 (Visual C++)查看官网的介绍:潜在的升级问题概述 (Visual C++).主要问题: 1. 如果使用 /GL(全程序优化)进行编译,则生成的对象文件只能使用生成 ...
随机推荐
- web编码(转)
问题2.浏览器编码方式是根据“响应标头-response header”中的键为“Content-Type”的值来自动选择判断,而不会简单的根据你在html中看到的标签值<meta http-e ...
- UITableViewCell性能优化
5.UITableViewCell性能优化 > 定义一个循环利用标识 static NSString *ID = @"C1"; > 从缓存池中取出可循环利用的cell ...
- aix6.1 openssh安装
环境: IBM AIX6.1 1.下载(可以直接从附件中下载): openssl IBM官方网站下载:https://www14.software.ibm.com/webapp/iwm/web/reg ...
- SQLServer,仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表xx中的标识列指定显式值
情景: 如果此表的主键或者其中有一个列使用了 IDENTITY(1,1) 自增长时,但又想手动为此列指定值时,当用如下解决方案: set identity_insert 表名 ON 使用此命令把表的 ...
- Cow Sorting(置换群)
Cow Sorting Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6664 Accepted: 2602 Descr ...
- 怎样解决Ubuntu发热严重地问题
刚装ubuntu的时候那是相当地热,hot.直接地原因是没有对应地显卡驱动,然后在software update里面找到Nivida地最新驱动,兴高採烈地装上试一试.一点用处没有! 在网上搜了搜,有一 ...
- uva 10051 Tower of Cubes(DAG最长路)
题目连接:10051 - Tower of Cubes 题目大意:有n个正方体,从序号1~n, 对应的每个立方体的6个面分别有它的颜色(用数字给出),现在想要将立方体堆成塔,并且上面的立方体的序号要小 ...
- PHP语言基础06 MySql By ACReaper
上篇介绍了如用PHP连接上MySql进行,并进行sql语句的执行.但是我们没有介绍,如何输出处理的结果,如何获得处理的结果. 这里要先说明Mysql有两种查询处理模式,一种是有缓冲的查询处理模式,一种 ...
- c#常见操作
1. StreamWriter - 文件写入类StreamWriter s = new StreamWriter(address + "/Menu.ini", true);s.Wr ...
- httpclient response 重定向
HTTPClient请求后,重定向后,获取重定向的URL. 方法一:重定向后获取URL import org.apache.http.HttpEntity; import org.apache.htt ...