关键命令:

动态库制作命令

gcc xxx.c -fPIC -shared -o libxxx.so

静态库制作命令

gcc -c xxx.c

ar crv libxxx.a xxx.o

例:

//hello.h
#ifndef HELLO_H
#define HELLO_H
void hello(const char * name);
#endif //hello.c
#include<stdio.h>
void hello(const char * name)
{
printf("hello %s!\n",name);
} //test.c
#include<stdio.h>
#include"hello.h"
int mian()
{
hello("csk");
return ;
}

一、将hello.c 编译成静态库

gcc -c hello.c //生成hello.o文件

ar -rcv libhello.a hello.o //生成静态库

gcc -o hello test.c -L. -lhello //链接静态库将test.c文件编译生成可执行文件hello

./hello //执行

二、将hello.c编译生成动态库

gcc hello.c -fPIC -shared -o libhello.so //生成动态库

gcc -o hello test.c -L. -lhello //链接动态库将test.c文件编译生成可执行文件hello

export LD_LIBRARY_PATH=$(pwd) 或者ldconfig "目录名" (当前文件所在的目录)

./hello //执行

使用Makefile 编译动态库

# 、准备工作,编译方式、目标文件名、依赖库路径的定义。
CC = gcc
CFLAGS := -Wall -O3 -std=c++0x OBJS = hello.o #.o文件与.cpp文件同名
LIB = libhello.so # 目标文件名
# . 生成.o文件
%.o : %.cpp
$(CC) $(CFLAGS) -fpic -c $< -o $@ # . 生成动态库文件
$(LIB) : $(OBJS)
rm -f $@
$(CC) -shared -o $@ $(OBJS)
rm -f $(OBJS) # . 删除中间过程生成的文件
clean:
rm -f $(OBJS) $(LIB)

使用Makefile 编译静态库

# 、准备工作,编译方式、目标文件名、依赖库路径的定义。
CC = gcc
CFLAGS := -Wall -O2 -std=c++0x OBJS = hello.o #.o文件与.cpp文件同名
LIB = libhello.a # 目标文件名 # . 生成.o文件
%.o : %.cpp
$(CC) $(CFLAGS) -c $< -o $@ # . 生成静态库文件
$(LIB) : $(OBJS)
rm -f $@
ar cr $@ $(OBJS)
rm -f $(OBJS) # . 删除中间过程生成的文件
clean:
rm -f $(OBJS)$(LIB)

Linux下制作静(动)态库的更多相关文章

  1. Linux下制作和使用静态库和动态库

    概述 Linux操作系统支持的函数库分为静态库和动态库,动态库又称共享库.linux系统有几个重要的目录存放相应的函数库,如/lib /usr/lib. 静态函数库: 这类库的名字一般是libxxx. ...

  2. Linux下编译、使用静态库和动态库 自己测过的

    每个程序实质上都会链接到一个或者多个的库.比如使用C函数的程序会链接到C运行时库,GUI程序会链接到窗口库等等.无论哪种情况,你都会要决定是链接到静态库(static libary)还是动态库(dyn ...

  3. linux下制作linux系统盘(光盘、U盘)

    cdrecord制作启动光盘 首先cdrecord -scanbus输出设备列表和标识,(我的此次为5,0,0)  [ˈrekərd] 然后用cdrecord -v dev=5,0,0 -eject ...

  4. 如何在linux下制作一个windows的可启动u盘?

    如何在linux下制作一个windows的可启动u盘? 情景是这样的,有一个windows10的iso,现在想通过U盘安装,要求即支持UEFI(启动引导器),又支持Legacy(启动引导器),因为有一 ...

  5. 关于VS2013下制作和使用静态库和动态库

    关于VS2013下制作和使用静态库和动态库 引言 什么是库:库是写好的现有的,成熟的,可以复用的代码. 所谓静态.动态是指链接.将一个程序编译成可执行程序的步骤: 静态库在链接阶段,会将汇编生成的目标 ...

  6. 在Linux下制作一个磁盘文件,在u-boot 阶段对emmc 烧写整个Linux系统方法

    在Linux 下制作一个磁盘文件, 可以给他分区,以及存储文件,然后dd 到SD卡便可启动系统. 在u-boot 下启动后可以读取该文件,直接在u-boot 阶段就可以做烧写操作,省略了进入系统后才进 ...

  7. 在Linux下制作Linux&windows启动盘

    在Linux下制作Linux&windows启动盘 如何在Linux-mint环境下,制作其他Linux发行版的UEFI启动盘,以及Windows10的UEFI模式启动盘. 对于U盘的操作,可 ...

  8. Linux下制作Windows启动U盘的工具

    Linux下制作Windows启动U盘的工具 很多人说Linux下制作Windwos启动盘要用GRUB4DOS建立引导,其实不用,有专门的工具的,就像Windows下有Rufus制作Linux启动U盘 ...

  9. linux下制作img文件

    一.简介 制作img文件可以使用linux系统中的dd命令制作,Linux dd 命令用于读取.转换并输出数据.dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件.设备或标准输 ...

随机推荐

  1. 玩转python之每次处理一个字符

    在Python中字符就是长度为1的字符串,所以可以循环遍历一个字符串,依次访问每一个字符,得到你想要的处理前提: 一个列表是个好主意,就像这样:thelist = list(thestring) 当然 ...

  2. Html Agility Pack解析HTML页

    文章来源:Html Agility Pack解析HTML页 现在,在不少应用场合中都希望做到数据抓取,特别是基于网页部分的抓取.其实网页抓取的过程实际上是通过编程的方法,去抓取不同网站网页后,再进行分 ...

  3. Asycn/Await 异步编程初窥(二)

    经过总过4天的学习和实践,做完了 WinForm 下 .Net 4.5 的基本异步应用,实现了一个 Http 协议下载的测试程序,为以后使用 .Net 4.5 积累知识和经验.这个小程序完成这样几个作 ...

  4. Windows Serer 2003 配置手册 – 创建Active Dictionary域

    域与工作组的关系 实际上我们可以把域和工作组联系起来理解,在工作组上你一切的设置在本机上进行包括各种策略,用户登录也是登录在本机的,密码是放在本机的数据库来验证的.而如果你的计算机加入域的话,各种策略 ...

  5. BroadcastReceiver基础总结

    BroadcastReceiver基础总结 BroadcastReceiver是Android四大组件之一,主要负责接收系统或其他程序发出的广播,在开发中,通常用做事件驱动的起源,比如开机就要开启一个 ...

  6. 常用的模式、JSON与DTO

    表现层的设计(一)——常用的模式.JSON与DTO 上几篇博文介绍了 业务逻辑层和数据访问层,我认为写博文的作用主要是向业界的读者交流一种思想,点到为止,至于学习架构设计,通过几篇博文是讲不清楚的,还 ...

  7. 在.Net中执行js

    在.Net中执行js 利用Noesis.Javascript开源组件可以做到在.net中执行js脚本,同时js脚本也能调用C#函数.这个组件的获得方式:在NuGet中输入搜索"Noesis& ...

  8. CSS:用Less实现栅格系统

    CSS:用Less实现栅格系统 背景 公司一直没有专职的前端和美工,Javascript相对来说我熟悉一点,CSS+HTML有四五年没有搞过了,最近要学一下,招聘或和美工配合的时候会有用处. 收集的资 ...

  9. Arduino 3g shield using GSM bought from ITead

    This is an old arduino 3G module bought half years ago. Its wiki: http://wiki.iteadstudio.com/ITEAD_ ...

  10. CXF.bat

    @echo off rem ------------------------------------------------------------------- rem CXF Environmen ...