`

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动态链接库的开发实例

    本教程将通过一个实例深入探讨Linux下C/C++语言如何开发和使用动态链接库。 一、动态链接库基础 动态链接库与静态链接库(.a文件)的主要区别在于,静态链接库在编译时会将库中的代码合并到可执行文件中,而动态...

    Linux C++编译及 静态/动态 链接库 笔记

    通过这个例子,你可以学习如何在实际项目中使用动态链接库,如何编译和运行程序,以及如何处理可能出现的问题。 理解并熟练掌握这些知识点对于在Linux环境下进行C++开发至关重要,无论是开发独立的应用程序还是构建...

    linux动态链接库示例

    在Linux操作系统中,动态链接库(Dynamic Linking Library,通常以`.so`文件结尾)是一种共享的对象文件,它包含可由多个程序同时使用的代码和数据。动态链接库可以帮助节省内存,因为多个进程可以共享同一段内存...

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

    在Linux系统中,开发软件时我们常常会遇到静态链接库和动态链接库的概念。这两个库在程序编译和运行过程中起着至关重要的作用。这里,我们将深入探讨它们的区别以及如何在Linux Shell环境下创建和使用它们。 1. **...

    linux 静态库 创建 使用 实例

    创建和使用Linux静态库是软件开发过程中的重要环节。通过上述步骤,我们可以理解如何在Debian系统下利用GCC编译器创建静态库,并将其应用到我们的项目中。静态库的使用有助于简化程序结构,提高代码重用率,同时在...

    linux静态库及动态库创建及使用

    ### Linux静态库及动态库创建及使用 #### 一、基本概念 ##### 1.1 什么是库 在计算机编程领域,**库**(Library)是一系列预编译的代码集合,这些代码通常实现了某些功能或服务,可供其他程序在运行时调用。库可以...

    Linux下Gcc生成和使用静态库和动态库详解

    ### Linux下Gcc生成和使用静态库和动态库详解 #### 一、基本概念 **1.1 什么是库** 库本质上是一种可执行代码的二进制形式,它可以被操作系统载入内存执行。无论是Windows还是Linux平台,都广泛地使用着库。然而...

    举例分析Linux动态库和静态库

    在Linux环境下,静态库和动态库是两种常见的链接库形式,它们分别在编译和运行阶段发挥着不同的作用。 **静态库**在程序编译过程中会被链接到目标代码中,也就是说,最终的可执行文件会包含静态库中被引用的所有...

    LINUX系统中动态链接库的创建与使用

    本文将详细介绍如何在Linux系统中创建和使用动态链接库,通过实例讲解整个过程。 #### 二、Linux动态链接库的优势 1. **节省内存空间**:动态链接库可以在多个应用程序之间共享,减少了内存占用。 2. **易于更新**...

    linux静态库和共享库.pdf

    在Linux操作系统中,库扮演着至关重要的角色,它们是预先编译的代码集合,允许开发者重用和集成已经实现的功能,而无需从零开始编写代码。...理解和掌握静态库与共享库的使用和管理对于任何Linux开发者都是至关重要的。

    Linux静态链接库与模板类的处理方式

    动态链接库允许在运行时根据实际需要加载和实例化模板类,从而避免了静态链接库的限制。 #### 五、示例代码 下面是一个简单的示例,演示如何显式实例化模板类并将其包含到静态链接库中: ```cpp // lib_test.cc #...

    Linux动态链接库.so文件的创建与使用

    总的来说,Linux动态链接库`.so`文件的创建和使用是系统编程中的关键技能,掌握这一技术有助于优化程序性能,实现模块化设计,并有效地管理系统资源。在实际开发中,了解如何创建、管理及使用动态链接库对于提升软件...

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

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

    理解linux下动态链接库延迟绑定.rar_lib_linux

    标签"lib linux"表明讨论的内容与Linux环境下的库有关,这包括如何创建、管理、更新和使用动态链接库。开发者可以通过`ldd`命令查看程序的动态链接依赖,`ldconfig`用于管理库的搜索路径和缓存,而`nm`和`objdump`等...

    Matlab动态链接库编程

    本文深入探讨了如何在Matlab环境中利用动态链接库(Dynamic Link Library,DLL)技术来增强程序性能和功能。通过使用DLL,用户能够在Matlab中调用其他编程语言(如C/C++)编写的高效代码,从而显著提升程序执行效率...

    C语言实现的动态链接封装实例(包含linux系统和windos系统的两个例子/dll库封装/so库封装)

    本篇将详细介绍C语言在Windows和Linux系统下如何实现动态链接库的封装以及如何进行调用。 首先,我们来看看Windows系统下的DLL封装。DLL文件包含了可被其他程序调用的函数或数据。在C语言中,创建DLL通常涉及以下几...

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

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

    linux gcc生成动态库和静态库

    #### 二、用GCC生成静态和动态链接库的示例 为了更好地理解如何创建静态库和动态库,我们可以以一个简单的例子进行说明。假设我们有一个简单的头文件`hello.h`和实现文件`hello.c`,我们将基于这两个文件来创建静态...

    linux下静态库及动态库的创建与使用.pdf

    通过这个实验,我们可以更好地理解静态库和动态库在Linux环境下的创建、使用和管理方式,以及它们在软件开发中的作用和优势。库的存在极大地提高了代码的复用性和效率,减少了重复工作,是现代软件开发不可或缺的一...

    Linux静态库编译

    3. **编译链接**:最后,当编译应用程序时,链接器会使用静态库中的函数和数据。使用`gcc main.c -L/path/to/library -lfoo`,其中`-L`指定库路径,`-l`指定库名(去掉`lib`前缀和`.a`后缀)。 ### 实例一:创建...

Global site tag (gtag.js) - Google Analytics