`

Linux静态和动态链接库使用实例

 
阅读更多

Linux静态和动态链接库使用实例

Ø 不同于Win32DLLLinux标准对象中的所有函数都是直接导出的,都可以被调用程序所访问。也就是说不用头文件即可被导出。

Ø 静态和动态的区别

静态库的代码在编译时已经进入被包含到目标文件了;而动态库的代码要在目标文件运行的时候才会被包含进去,在编译的时候只是对动态库进行一个链接。

1、静态链接库实例

//fun1.h

#include <stdio.h>

void fun1printf();

////////////////////////////////////////////////////////////////////////////////////////////

//fun1.c

#include "fun1.h"

void fun1printf()

{

printf("fun1printf!/n");

}

////////////////////////////////////////////////////////////////////////////////////////////////

//fun2.h

#include <stdio.h>

void fun2printf();

////////////////////////////////////////////////////////////////////////////////////////////////

//fun2.c

#include "fun2.h"

void fun2printf()

{

printf("fun2printf!/n");

}

/////////////////////////////////////////////////////////////////////////////////////////////////////

//staticcall.c

#include <stdio.h>

int main()

{

fun1printf();//不需要导入,直接引用函数

}

///////////////////////////////////////////////////////////////////////////////////////////////////////

//makefile

all:staticlib main

staticlib:fun1.c fun2.c

gcc -c -o fun1.o fun1.c

gcc -c -o fun2.o fun2.c

ar cqs libfun.a fun1.o fun2.o

main:staticcall.c libfun.a

gcc -o staticcall staticcall.c -L ./ -lfun

生成静态链接库的命令是ar cqs

2、动态链接库实例

所有文件同静态链接库,只是makefile编写不一样。

all:sharedlib sharedcall

sharedlib:fun1.c fun2.c

gcc -fPIC -c fun1.c -o fun1.o

gcc -fPIC -c fun2.c -o fun2.o

gcc -shared fun1.o fun2.o -o libfun.so

sharedcall:

gcc -o sharedcall -L ./ -lfun sharedcall.c

编译生成动态链接库的文件时,必须加上-fPICPosition Independent Code(地址无关编码)。

在运行程序之前,必须:

Ø export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/ccode/dll/

Ø /etc/ld.so.conf中添加/root/ccode/dll/路径

分享到:
评论

相关推荐

    Linux C静态链接库与动态链接库编程简单介绍

    Linux C 静态链接库 动态链接库 简单介绍 看完本例子,可以入门了。。。。

    linux shell下的静态链接库和动态链接库实例(脚本).docx

    linux shell下的静态链接库和动态链接库实例(脚本).docx

    linux下C++动态链接C++库示例

    注意其中使用函数返回基类指针的用法,因为Linux的动态链接库不能像MFC中那样直接导出类 一、介绍 如何使用dlopen API动态地加载C++函数和类,是Unix C++程序员经常碰到的问题。 事实上,情况偶尔有些复杂,需要...

    Linux静态库与动态库实例详解

    Linux静态库与动态库实例详解 1. Linux 下静态链接库编译与使用 首先编写如下代码: // main.c #include test.h int main(){ test(); return 0; } // test.h #include using namespace std; void test(); // test...

    Linux操作系统下动态库的生成及链接方法

    Linux下动态库文件的扩展名为\".so\"(Shared Object)。按照约定,所有动态库文件名的形式是libname.so(可能在名字中加入版本号)。这样,线程函数库被称作...本文仅以简单的例子介绍动态库文件的生成和链接方法。

    linux网络编程-宋敬彬-part3

    2.2.9 生成动态链接库 26 2.2.10 动态加载库 29 2.2.11 GCC常用选项 31 2.2.12 编译环境的搭建 33 2.3 Makefile文件简介 34 2.3.1 一个多文件的工程例子 34 2.3.2 多文件工程的编译 36 2.3.3 Makefile...

    linux网络编程-宋敬彬-part2

    2.2.9 生成动态链接库 26 2.2.10 动态加载库 29 2.2.11 GCC常用选项 31 2.2.12 编译环境的搭建 33 2.3 Makefile文件简介 34 2.3.1 一个多文件的工程例子 34 2.3.2 多文件工程的编译 36 2.3.3 Makefile...

    Linux多线程服务端编程:使用muduo C++网络库

    《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...

    linux网络编程-宋敬彬-part1

    2.2.9 生成动态链接库 26 2.2.10 动态加载库 29 2.2.11 GCC常用选项 31 2.2.12 编译环境的搭建 33 2.3 Makefile文件简介 34 2.3.1 一个多文件的工程例子 34 2.3.2 多文件工程的编译 36 2.3.3 Makefile...

    链接器和加载器.PDF(链接器和加载器 Beta 2)

    10.7 微软动态链接库 10.8 OSF/1伪静态共享库 10.9 让共享库快一些 10.10 几种动态链接方法的比较 练习 项目 第11章 高级技术 11.1 C++的技术 11.2 增量链接和重新链接 11.3 链接时的垃圾收集 11.4 链接时优化 ...

    完美编译libharu2.3.0开源PDF写入库

    libharu2.3.0开源PDF读写库,这是一个非常简洁短小的库,只依赖libpng和zlib库,使用非常方便。缺点是对Unicode支持不是很...完美编译了静态库、dll动态库四个版本,推荐使用dll版本库,不在额外需要其他静态库的链接。

    vc++ 开发实例源码包

    详细讲解了Crypt++的加密解密的使用以及其它的加密解密方法(例如base64加解密、哈希加解密以及其它的文件加解密),分静态库和动态库方法。 JSCalls_demo js调用的演示源码 树控件拖动 演示了在树控件中来回拖动...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例052 使用位运算对数字进行加密和解密 83 2.3 包含语句 84 实例053 提高代码重用率 84 实例054 包含数据库连接文件 85 实例055 包含网站头文件 86 实例056 包含网站尾文件 87 实例057 包含网站的主文件 88 2.4 ...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例052 使用位运算对数字进行加密和解密 83 2.3 包含语句 84 实例053 提高代码重用率 84 实例054 包含数据库连接文件 85 实例055 包含网站头文件 86 实例056 包含网站尾文件 87 实例057 包含网站的主文件 88 2.4 ...

    vc++ 应用源码包_5

    vc++动态链接库编程之DLL典型实例源代码下载 VC++仿Dreamweaver取色器源代码 VC++挂机锁屏系统源程序 VC++建立桌面或开始菜单快捷方式 VC++界面库编程 SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本...

    vc++ 应用源码包_2

    vc++动态链接库编程之DLL典型实例源代码下载 VC++仿Dreamweaver取色器源代码 VC++挂机锁屏系统源程序 VC++建立桌面或开始菜单快捷方式 VC++界面库编程 SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本...

    vc++ 应用源码包_6

    vc++动态链接库编程之DLL典型实例源代码下载 VC++仿Dreamweaver取色器源代码 VC++挂机锁屏系统源程序 VC++建立桌面或开始菜单快捷方式 VC++界面库编程 SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本...

    vc++ 应用源码包_3

    vc++动态链接库编程之DLL典型实例源代码下载 VC++仿Dreamweaver取色器源代码 VC++挂机锁屏系统源程序 VC++建立桌面或开始菜单快捷方式 VC++界面库编程 SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本...

    vc++ 应用源码包_1

    vc++动态链接库编程之DLL典型实例源代码下载 VC++仿Dreamweaver取色器源代码 VC++挂机锁屏系统源程序 VC++建立桌面或开始菜单快捷方式 VC++界面库编程 SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本...

Global site tag (gtag.js) - Google Analytics