Linux静态和动态链接库使用实例
Ø 不同于Win32DLL,Linux标准对象中的所有函数都是直接导出的,都可以被调用程序所访问。也就是说不用头文件即可被导出。
Ø 静态和动态的区别
静态库的代码在编译时已经进入被包含到目标文件了;而动态库的代码要在目标文件运行的时候才会被包含进去,在编译的时候只是对动态库进行一个链接。
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
|
编译生成动态链接库的文件时,必须加上-fPIC,Position Independent Code(地址无关编码)。
在运行程序之前,必须:
Ø export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/ccode/dll/
Ø 在/etc/ld.so.conf中添加/root/ccode/dll/路径
分享到:
相关推荐
本教程将通过一个实例深入探讨Linux下C/C++语言如何开发和使用动态链接库。 一、动态链接库基础 动态链接库与静态链接库(.a文件)的主要区别在于,静态链接库在编译时会将库中的代码合并到可执行文件中,而动态...
通过这个例子,你可以学习如何在实际项目中使用动态链接库,如何编译和运行程序,以及如何处理可能出现的问题。 理解并熟练掌握这些知识点对于在Linux环境下进行C++开发至关重要,无论是开发独立的应用程序还是构建...
在Linux操作系统中,动态链接库(Dynamic Linking Library,通常以`.so`文件结尾)是一种共享的对象文件,它包含可由多个程序同时使用的代码和数据。动态链接库可以帮助节省内存,因为多个进程可以共享同一段内存...
在Linux系统中,开发软件时我们常常会遇到静态链接库和动态链接库的概念。这两个库在程序编译和运行过程中起着至关重要的作用。这里,我们将深入探讨它们的区别以及如何在Linux Shell环境下创建和使用它们。 1. **...
创建和使用Linux静态库是软件开发过程中的重要环节。通过上述步骤,我们可以理解如何在Debian系统下利用GCC编译器创建静态库,并将其应用到我们的项目中。静态库的使用有助于简化程序结构,提高代码重用率,同时在...
### Linux静态库及动态库创建及使用 #### 一、基本概念 ##### 1.1 什么是库 在计算机编程领域,**库**(Library)是一系列预编译的代码集合,这些代码通常实现了某些功能或服务,可供其他程序在运行时调用。库可以...
### Linux下Gcc生成和使用静态库和动态库详解 #### 一、基本概念 **1.1 什么是库** 库本质上是一种可执行代码的二进制形式,它可以被操作系统载入内存执行。无论是Windows还是Linux平台,都广泛地使用着库。然而...
在Linux环境下,静态库和动态库是两种常见的链接库形式,它们分别在编译和运行阶段发挥着不同的作用。 **静态库**在程序编译过程中会被链接到目标代码中,也就是说,最终的可执行文件会包含静态库中被引用的所有...
本文将详细介绍如何在Linux系统中创建和使用动态链接库,通过实例讲解整个过程。 #### 二、Linux动态链接库的优势 1. **节省内存空间**:动态链接库可以在多个应用程序之间共享,减少了内存占用。 2. **易于更新**...
在Linux操作系统中,库扮演着至关重要的角色,它们是预先编译的代码集合,允许开发者重用和集成已经实现的功能,而无需从零开始编写代码。...理解和掌握静态库与共享库的使用和管理对于任何Linux开发者都是至关重要的。
动态链接库允许在运行时根据实际需要加载和实例化模板类,从而避免了静态链接库的限制。 #### 五、示例代码 下面是一个简单的示例,演示如何显式实例化模板类并将其包含到静态链接库中: ```cpp // lib_test.cc #...
总的来说,Linux动态链接库`.so`文件的创建和使用是系统编程中的关键技能,掌握这一技术有助于优化程序性能,实现模块化设计,并有效地管理系统资源。在实际开发中,了解如何创建、管理及使用动态链接库对于提升软件...
注意其中使用函数返回基类指针的用法,因为Linux的动态链接库不能像MFC中那样直接导出类 一、介绍 如何使用dlopen API动态地加载C++函数和类,是Unix C++程序员经常碰到的问题。 事实上,情况偶尔有些复杂,需要...
标签"lib linux"表明讨论的内容与Linux环境下的库有关,这包括如何创建、管理、更新和使用动态链接库。开发者可以通过`ldd`命令查看程序的动态链接依赖,`ldconfig`用于管理库的搜索路径和缓存,而`nm`和`objdump`等...
本文深入探讨了如何在Matlab环境中利用动态链接库(Dynamic Link Library,DLL)技术来增强程序性能和功能。通过使用DLL,用户能够在Matlab中调用其他编程语言(如C/C++)编写的高效代码,从而显著提升程序执行效率...
本篇将详细介绍C语言在Windows和Linux系统下如何实现动态链接库的封装以及如何进行调用。 首先,我们来看看Windows系统下的DLL封装。DLL文件包含了可被其他程序调用的函数或数据。在C语言中,创建DLL通常涉及以下几...
Linux静态库与动态库实例详解 1. Linux 下静态链接库编译与使用 首先编写如下代码: // main.c #include test.h int main(){ test(); return 0; } // test.h #include using namespace std; void test(); // test...
#### 二、用GCC生成静态和动态链接库的示例 为了更好地理解如何创建静态库和动态库,我们可以以一个简单的例子进行说明。假设我们有一个简单的头文件`hello.h`和实现文件`hello.c`,我们将基于这两个文件来创建静态...
通过这个实验,我们可以更好地理解静态库和动态库在Linux环境下的创建、使用和管理方式,以及它们在软件开发中的作用和优势。库的存在极大地提高了代码的复用性和效率,减少了重复工作,是现代软件开发不可或缺的一...
3. **编译链接**:最后,当编译应用程序时,链接器会使用静态库中的函数和数据。使用`gcc main.c -L/path/to/library -lfoo`,其中`-L`指定库路径,`-l`指定库名(去掉`lib`前缀和`.a`后缀)。 ### 实例一:创建...