【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++静态库与动态库 这次分享的宗旨是--让大家学会创建与使用静态库.动态库,知道静态库与动态库 ...
随机推荐
- Linux Tcpdump 使用举例 ---持续更新
举例: 保存到文件tcpdump -w xxx.cap(默认抓取eth0的包) 抓eth1的包 tcpdump -i eth1 -w /tmp/xxx.cap 抓到完成的数据包(默认只抓前68字节) ...
- EXISTS、EXCEPT、INTERSECT 运算符
转:http://www.cnblogs.com/WizardWu/archive/2011/10/01/2197147.html EXISTS运算符 EXISTS 可称之为运算符,有些书称它为关键词 ...
- 错误代码2104:无法下载Silverlight应用程序。请查看Web服务器设置
今天调试Silverlight程序,把ClientBin文件夹下的.xap文件删除后遇到这样一个问题:错误代码2104:无法下载Silverlight应用程序.请查看Web服务器设置.在网上查了一下, ...
- ylbtech-LanguageSamples-Threading(线程处理)
ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-Threading(线程处理) 1.A,示例(Sample) 返回顶部 “线程处理”示例 ...
- Maven详解之仓库------本地仓库、远程仓库
在Maven中,任何一个依赖.插件或者项目构建的输出,都可以称之为构件. Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库.(仓库就是存放依赖和插件的地方) 任何的 ...
- IntelliJ IDEA 注册码
IntelliJ IDEA 注册码 *.lanyus.com及*.qinxi1992.cn下的全部授权服务器已遭JetBrains封杀 请搭建自己的IntelliJ IDEA授权服务器,教程在http ...
- JMeter非GUI方式运行时动态设置线程组及传参
http://blog.csdn.net/selingchen/article/details/48106517 在使用JMeter进行性能测试自动化时,可能会有如下需求: 1.指定运行多少线程,指定 ...
- [Java] java中方法可以重载
一个类中可以定义不止一个构造器,在使用new创建对象时,Java会根据构造器提供的参数来决定构建哪一个构造器,另外在Java中,Java会同时根据方法名和参数列表来决定所要调用的方法,这叫做方法重载( ...
- [ZOJ 1004] Anagrams by Stack (简单搜索)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1004 题目大意:给你个栈,给你源串和目标串,按字典序输出符合要求 ...
- python3 AttributeError: 'NoneType' object has no attribute 'split'
from wsgiref.simple_server import make_server def RunServer(environ, start_response): start_response ...