【linux】 静态库编译
文件如下:
root@ubuntu:/home/test# ll
total
drwxr-xr-x root root Sep : ./
drwxr-xr-x root root Sep : ../
-rwxr-xr-x root root Sep : a.out*
-rwxr-xr-x root root Sep : exe*
drwxr-xr-x root root Sep : lib/
-rwxrwxrwx root root Sep : libcaller.cpp*
-rw-r--r-- root root Sep : libcaller.h
-rw-r--r-- root root Sep : libcaller.o
-rwxrwxrwx root root Sep : libfuncapi.cpp*
-rw-r--r-- root root Sep : libfuncapi.h
-rw-r--r-- root root Sep : libfuncapi.o
-rw-r--r-- root root Sep : libsystemapi.h
-rwxrwxrwx root root Sep : libsystem.cpp*
-rw-r--r-- root root Sep : libsystem.o
-rw-r--r-- root root Sep : makefile
-rwxrwxrwx root root Sep : test.cpp*
root@ubuntu:/home/test#
文件内容分别如下:
root@ubuntu:/home/test# cat test.cpp
#include <iostream> extern void caller(); int main()
{
caller();
return ;
} root@ubuntu:/home/test# cat libcaller.h
#ifndef LIB_CALLER_H
#define LIB_CALLER_H void caller(); #endif
root@ubuntu:/home/test# cat libcaller.cpp
#include <stdio.h>
#include "libfuncapi.h" void caller()
{
printf("this is %s @ %s:%d.", __FUNCTION__,__FILE__,__LINE__);
func_api();
return;
} root@ubuntu:/home/test# cat libfuncapi.h
#ifndef FUNC_API_H
#define FUNC_API_H void func_api(); #endif
root@ubuntu:/home/test# cat libfuncapi.cpp
#include <stdio.h>
#include "libsystemapi.h"
#include "libfuncapi.h" void func_api()
{
printf("this is %s @ %s:%d.\n", __FUNCTION__,__FILE__,__LINE__);
system_api();
return;
} #if 0
int main()
{
funcapi();
return ;
}
#endif
root@ubuntu:/home/test# cat libsystemapi.h
#ifndef SYSTEM_API_H
#define SYSTEM_API_H void system_api(); #endif
root@ubuntu:/home/test# cat libsystem.cpp
#include <stdio.h> void system_api()
{
printf("this is %s @ %s:%d.", __FUNCTION__,__FILE__,__LINE__);
return;
} root@ubuntu:/home/test#
makefile:
root@ubuntu:/home/test#
root@ubuntu:/home/test# cat makefile CUR_DIR=$(PWD) RM = rm -f OBJS = $(CUR_DIR)/*.o
LIB_DIR = $(CUR_DIR)/lib all: pre_work libsystemapi.a libfuncapi.a libcaller.a test libsystemapi.a:
g++ -c libsystem.cpp -o libsystem.o
ar cr $@ libsystem.o libfuncapi.a:libsystem.o
g++ -c libfuncapi.cpp -o libfuncapi.o
ar cr $@ libfuncapi.o $^ libcaller.a:libfuncapi.o libsystem.o
g++ -c libcaller.cpp -o libcaller.o
ar cr $@ libcaller.o $^ test: post_work $(LIB_DIR)/libcaller.a
g++ test.cpp $(LIB_DIR)/libcaller.a -o exe pre_work:
mkdir -p $(LIB_DIR) post_work:
mv ./*.a $(LIB_DIR)/ clean:
$(RM) $(OBJS) $(LIB_DIR)/*
root@ubuntu:/home/test#
【linux】 静态库编译的更多相关文章
- linux静态库的生成与使用(转)
linux静态库的生成与使用(转) 库是一种软件组件技术,库里面封装了数据和函数. 库的使用可以使程序模块化. Windows系统包括静态链接库(.lib文件)和动态链接库(.dll文件). Linu ...
- Linux静态库生成指南
Linux静态库生成指南 Linux上的静态库,其实是目标文件的归档文件.在Linux上创建静态库的步骤如下: 写源文件,通过 gcc -c xxx.c 生成目标文件. 用 ar 归档目标文件,生 ...
- linux动态库编译和使用详细剖析
引言 重点讲述linux上使用gcc编译动态库的一些操作.并且对其深入的案例分析.最后介绍一下动态库插件技术, 让代码向后兼容.关于linux上使用gcc基础编译, 预编译,编译,生成机械码最后链接输 ...
- linux动态库编译和使用
linux动态库编译和使用详细剖析 引言 重点讲述linux上使用gcc编译动态库的一些操作.并且对其深入的案例分析.最后介绍一下动态库插件技术, 让代码向后兼容.关于linux上使用gcc基础编译, ...
- QT 4.8 静态库编译方法
最最初踏上QT之路是受到了XiaomaGee的指点,相比于常规的窗口程序开发,QT有着以下特点: 1. 优良的跨平台特性(支持Win.Linux.Mac 不同的平台下只需重新编译即可使用) 2. 面向 ...
- linux动态库编译和使用详细剖析 - 后续
引言 - 也许是修行 很久以前写过关于动态库科普文章, 废话反正是说了好多. 核心就是在 linux 上面玩了一下 dlopen : ) linux动态库编译和使用详细剖析 - https://www ...
- [转]QT 4.8 静态库编译方法
最最初踏上QT之路是受到了XiaomaGee的指点,相比于常规的窗口程序开发,QT有着以下特点: 1. 优良的跨平台特性(支持Win.Linux.Mac 不同的平台下只需重新编译即可使用) 2. 面向 ...
- Linux 静态库(.a)转换为动态库(.so)
Linux 静态库转换为动态库 参考 http://blog.csdn.net/moxuansheng/article/details/5812410 首先将.a文件转为.so文件是可以实现的 原因是 ...
- 关于Linux静态库和动态库的分析
关于Linux静态库和动态库的分析 关于Linux静态库和动态库的分析 1.什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可运行代码的二进制形式.能够被操作系统加 ...
- 动态库与静态库的学习 博主写的很好 静态库 编译的时候 需要加上 static 动态库编译ok运行不成功就按照文章中的方法修改
来源连接 http://www.cnblogs.com/skynet/p/3372855.html C++静态库与动态库 这次分享的宗旨是--让大家学会创建与使用静态库.动态库,知道静态库与动态库 ...
随机推荐
- EXISTS、EXCEPT、INTERSECT 运算符
转:http://www.cnblogs.com/WizardWu/archive/2011/10/01/2197147.html EXISTS运算符 EXISTS 可称之为运算符,有些书称它为关键词 ...
- Hbase原理
Hbase原理 概述 HBase是一个构建在HDFS上的分布式列存储系统:HBase是基于Google BigTable模型开发的,典型的key/value系统:HBase是Apache Hadoop ...
- 标准电流信号为什么是4-20MA?(网络摘录)
一来源: 4-20mA.DC(1-5V.DC)信号制是国际电工委员会(IEC):过程控制系统(是连接仪表.变送设备.控制设备.计算机采样设备)用模拟信号标准.我国从DDZ-Ⅲ型电动仪表开始采用这一国际 ...
- Software Engineer
1, 软件工程师 软件工程师英文是Software Engineer,是从事软件职业的人员的一种职业能力的认证,通过它说明具备了工程师的资格.软件工程师是从事软件开发相关工作的人员的统称. 它是一个广 ...
- Ubuntu14.10 更新源,现在很多源已经停用了建议使用ubuntu15以上
http://cdimage.ubuntu.com/ubuntukylin/releases/15.10/release/ 不同的网络状况连接以下源的速度不同, 建议在添加前手动验证以下源的连接速度( ...
- Python深入01 特殊方法与多范式
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明. Python一切皆对象,但同时,Python还是一个多范式语言(multi-paradi ...
- Bugtags:移动时代首选 Bug 管理系统
Bug 管理系统之重 回想我们每次开启一个新项目,筹备之初,首要之事就是选择一款 Bug 管理系统.市面上有诸多 Bug 管理系统可供选择:Jira.Redmine.Bugzilla 等.这些系统功能 ...
- 使用matplot绘图 @python
1. 使用csv 模块读取数据 2. 定义label 3. 绘图,调参 #!/usr/bin/env python # coding=utf-8 import sys import matplotli ...
- arm-linux-objcopy
被用来复制一个目标文件的内容到另一个文件中,可用于不同源文件的之间的格式转换示例: arm-linux-objcopy –O binary –S file.elf file.bin 常用的选项(大写) ...
- Hibernate的dialect大全
RDBMS 方言 DB2 org.hibernate.dialect.DB2Dialect DB2 AS/400 org.hibernate.dialect.DB2400Dialect DB2 OS3 ...