编译动态库和连接动态库

$ 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 -g -L. -o main main.o -lplus
	rm main.o plus.o

main.o: main.c
	gcc -c -g -o main.o main.c

libplus.so: plus.o
	gcc -g -shared -o libplus.so plus.o

plus.o: plus.c
	gcc -c -g -fPIC -o plus.o plus.c

.PHONY: clean
clean:
	rm main libplus.so main.o plus.o
$ ls
Makefile  main.c  plus.c  plus.h
$ make
gcc -c -g -o main.o main.c
gcc -c -g -fPIC -o plus.o plus.c
gcc -g -shared -o libplus.so plus.o
gcc -g -L. -o main main.o -lplus
rm main.o plus.o
$ file libplus.so
libplus.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped
$ file main
main: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped
$ LD_LIBRARY_PATH=.
$ ldd main | grep plus
	libplus.so => ./libplus.so (0x00007f8018644000)
$ ./main
$ echo $?
3
$ 

时间: 2024-10-21 13:33:58

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

编译静态库和连接静态库

简介:下面的例子是在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 "plu

Qt动态连接库/静态连接库创建与使用,QLibrary动态加载库

版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt动态连接库/静态连接库创建与使用,QLibrary动态加载库     本文地址:http://techieliang.com/2017/12/680/ 文章目录 1. 动态连接库创建与使用  1.1. 项目创建  1.2. 调用-使用.h文件 2. 静态库创建及使用  2.1. 创建  2.2. 使用 3. QLibrary动态加载动态库  3.1. 介绍  3.2. 范例  3.3.

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:利用静态函数库编译成的文件比较大,因为整个 函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译

windows中静态库lib和动态dll的区别及使用方法

1. 静态库lib和动态dll的区别 1.1 项目类型 VS在建Win32项目时,有以下选项: windows应用程序控制台应用程序DLL静态库最后两个类型:DLL和静态库,这两种项目类型是不可以单独运行的,必须在Windows应用程序调用他们执行,是提供的库函数而已. 1.2 两种lib的区别: (1)静态库(.lib) 函数和数据被编译进一个二进制文件(通常扩展名为.LIB).在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其他模块组合起来创建

将静态库制作成动态库

一.系统说明 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

php动态扩展bcmath与sockets库模块

在学习安装zabbix的时候,前提需要搭建使用到LNMP框架,而在编译php时忘记添加bcmath与sockets 扩展包,发现当初安装时没有--enable-bcmath.--enable-sockets,自己又不想删除重装php,幸好php支 持单独添加某个extension,重要的就是要生成这个扩展对应的.so文件. 具体做法如下,要有与你已安装的php相同版本的php源代码安装包.我用的是php-7.0.5.tar.gz. [[email protected] ~]# tar -zxf

静态库(.a)与动态库(.so)的简明介绍

静态库(.a)与动态库(.so)的简明介绍 gcc有很多关于静态库,动态库的选项如-l,-L,-fPIC,-shared -Wl,-soname,看着很复杂容易混淆,其实静态库和动态库都是应需而生,只要有了一个线索都很容易理解. 普通编译 假设有三个文件(后面均使用这个例子): // mod1.c #include <stdio.h> void print_mod1(){ printf("%s\n",__func__); } // mod2.c #include <s

windows动态库与Linux动态库

Linux动态库和windows动态库的目的是基本一致的,但由于操作系统的不同,他们在许多方面还是不尽相同.但是尽管有差异Linux动态库的windows动态库还是可以移植的,有一些规则以及经验是必须的知道的. 两种系统动态库比较分析 Windows和Linux采用动态链接库技术 (1)动态库程序编写,在Windows系统下的执行文件格式是PE格式,动态库需要一个DllMain函数作为初始化的人口,通常在导出函数的声明时需要有_declspec(dllexport)关键字.Linux下的gcc编