编译静态库和连接静态库

简介:下面的例子是在linux下,编写一个简单的 求和静态库 libplus.a ,然后,使用之。

$ mkdir 1;cd 1
$ pwd
/home/nbz/1
$ cat >plus.c
int plus(int i0, int i1)
{
	return i0 + i1;
}
$ cat >plus.h
int plus(int i0, int i1);
$ gcc -c -fPIC -o plus.o plus.c
$ cat >main.c
#include "plus.h"
int main()
{
	return plus(2, 3);
}
$ ls
main.c  plus.c  plus.h  plus.o
$ ar -r libplus.a plus.o
ar: creating libplus.a
$ rm plus.o
$ ls
libplus.a  main.c  plus.c  plus.h
$ gcc -L. -o main main.c -lplus
$ ls
libplus.a  main  main.c  plus.c  plus.h
$ ./main
$ echo $?
5
$
$ rm main
$ ls
libplus.a  main.c  plus.c  plus.h
$ gcc -o main main.c libplus.a
$ ls
libplus.a  main  main.c  plus.c  plus.h
$ ./main
$ echo $?
5
$ 
时间: 2024-08-27 16:19:07

编译静态库和连接静态库的相关文章

编译动态库和连接动态库

$ mkdir 1;cd 1 $ cat >plus.c int plus(int i0, int i1) { return i0 + i1; } $ cat >plus.h int plus(int i0, int i1); $ cat >main.c #include "plus.h" int main(void) { return plus(1,2); } $ cat >Makefile main: main.o libplus.so plus.h gcc

GCC编译过程与动态链接库和静态链接库

1. 库的介绍 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.库有两种:静态库(.a..lib)和动态库(.so..dll). windows上对应的是.lib .dll linux上对应的是.a .so 在这里先介绍下Linux下的gcc编译的几个选项 g++ -c hellospeak.cpp 会将hellospeak.cpp 选

vc6.0连接静态链接库

使用VC6.0的人如果开发Windows程序时,一般都会遇到需要连接静态链接库的问题,比如开发音乐播放器的时候,需要mciSendString函数,而只是单独调用mciSendString没有用,还需要连接一个静态链接库Winmm.lib 我就以连接Winmm.lib为例,介绍如何在VC6.0中连接动态链接库 第一步打开VC6.0 第二步:新建一个工程或者打开一个已经建立的工程 第三步:选择工程 第四步:选择设置 第五步:选择连接 第六步:在对象/库模板中添加Winmm.lib 添加后的效果:方

IOS 之 PJSIP 笔记(一) 编译多平台支持的静态库

好久没有写博客了,这也算是我步入新工作后的第一篇技术博文吧.在进入新公司前,早就有了技术层进入下一个迭代的准备,但很多事情是意想不到的,就像我以 C# 程序员的身份面试入职的,而今却是一个全职的 IOS 开发.从 C# 到 Objective-C 的切换,还是有不少成本的,加上今年又推出了 Swift,以后要学习的路是漫长的,其实,学习的路本身就是漫长的,不应该满足于一个阶段和特定领域.对我而言,语言的切换,已经太常见了,学习一门语言是很容易的事情,但,完全的掌握它,却不是易事,就像去摸清一个陌

简单程序的编译链接三种方法(编译多个源文件,静态链接库、动态链接库)

一个程序简单的程序如下: 1 hello.h #ifndef HELLO_H#define HELLO_H void hello(const char *name); #endif 2 hello.c #include <stdio.h>#include <stdlib.h> void hello(const char *name){ printf("hello %s\n",name);} 3 main.c #include <stdio.h>#in

Linux下动态库(.so)和静态库(.a) 的区别

静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库.编译之后程序文件大,但加载快,隔离性也好.动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在.多个应用程序可以使用同一个动态库,启动多个应用程序的时候,只需要将动态库加载到内存一次即可. 编译动态库: -shared 该选项指定生成动态连接库(让连接器生成T类型的导出符号表,有时候也生成弱连接W类型的导出符号),不用该标志外部程序无法连接.相当于一个可执行文件-fPIC:表示

在Linux中创建静态库.a和动态库.so

转自:http://www.cnblogs.com/laojie4321/archive/2012/03/28/2421056.html 在Linux中创建静态库.a和动态库.so 我们通常把一些公用函数制作成函数库,供其它程序使用. 函数库分为静态库和动态库两种. 1. 静态函数库 这类库的名字一般是libxxx.a:利用静态函数库编译成的文件比较大,因为整个 函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译

Linux - 动态(Dynamic)与静态(Static)函数库

首先我们要知道的是,函式库的类型有哪些?依据函式库被使用的类型而分为两大类,分别是静态 (Static) 与动态 (Dynamic) 函式库两类. 静态函式库的特色: 扩展名:(扩展名为 .a) 这类的函式库通常扩展名为 libxxx.a 的类型: 编译行为: 这类函式库在编译的时候会直接整合到运行程序当中,所以利用静态函式库编译成的文件会比较大一些喔: 独立运行的状态: 这类函式库最大的优点,就是编译成功的可运行档可以独立运行,而不需要再向外部要求读取函式库的内容 (请参照动态函式库的说明).

将静态库制作成动态库

一.系统说明 Ubuntu12.04TLS 64位 二.制作静态库 (1)编写需要制作成静态库的程序(根据实际情况进行编写,这里只是一个简单例子)     //bar.h              #ifndef _BAR_H     #define _BAR_H          void bar(int i);          #endif     //bar.c     #include <stdio.h>     #include <stdlib.h>     #incl