`
weiyuhu
  • 浏览: 235924 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

linux C 链接库 so制作及调用[转]

阅读更多
文章分类:C++编程

[文章作者:陈毓端 若转载请标注原文链接:http://blog.woyuw.com/?p=341]

最近的一个程序因为比较复杂,需要自己编写so动态链接库来给c语言程序调用。
下面就简单的写下so制作到调用的整个流程。
首先做个头文件

head.h:
C代码

   1. /* 
   2. head.h 
   3.   
   4. */  
   5. #include <stdio.h>  
   6. #include <stdlib.h>  
   7. void method_1(); //未设置参数  
   8. void method_2(char *s); // 设置了一个参数 

/*
head.h
 
*/
#include <stdio.h>
#include <stdlib.h>
void method_1(); //未设置参数
void method_2(char *s); // 设置了一个参数



method_1.c:
C代码

   1. /* 
   2.  method_1.c 
   3. */  
   4. #include "head.h"  
   5. void method_1()  
   6. {  
   7. printf("我是陈毓端,您执行的是方法1(method_1)");  
   8. } 

/*
method_1.c
*/
#include "head.h"
void method_1()
{
printf("我是陈毓端,您执行的是方法1(method_1)");
}



method_2.c
C代码

   1. /* 
   2. method_2.c 
   3. */  
   4. #include "head.h"  
   5. void method_2(char *s)  
   6. {  
   7. printf("我是陈毓端,您执行的是方法2(method_2):%s",s);  
   8. } 

/*
method_2.c
*/
#include "head.h"
void method_2(char *s)
{
printf("我是陈毓端,您执行的是方法2(method_2):%s",s);
}



关键一步,生成so(动态链接库)
Shell代码

   1. gcc head.h method_1.c method_2.c -fPIC -shared -o method.so 

gcc head.h method_1.c method_2.c -fPIC -shared -o method.so



到现在 method.so 文件已经制做完毕。

接下来是调用
work_so.c:
C代码

   1. #include  "stdio.h"  
   2. #include  "stdlib.h"  
   3. #include  "dlfcn.h"  
   4. int main()  
   5. {  
   6. void  *SoLib;  
   7. int   (*So)();  
   8. SoLib=dlopen("./method.so",RTLD_LAZY); //加载method.so  
   9. So   = dlsym( SoLib, "method_1");  //声名method_1方法  
  10. (*So)( "" );                                                  //执行method_1方法  
  11.    
  12. So    = dlsym(SoLib, "method_2");  
  13. (*So)( "method_2" ); //设置参数  
  14. } 

#include  "stdio.h"
#include  "stdlib.h"
#include  "dlfcn.h"
int main()
{
void  *SoLib;
int   (*So)();
SoLib=dlopen("./method.so",RTLD_LAZY); //加载method.so
So   = dlsym( SoLib, "method_1");  //声名method_1方法
(*So)( "" );                                                  //执行method_1方法
 
So    = dlsym(SoLib, "method_2");
(*So)( "method_2" ); //设置参数
}



编译 :
Shell代码

   1. gcc work_so.c -o word_so  -ldl 

gcc work_so.c -o word_so  -ldl

不出意外 结果为:
我是陈毓端,您执行的是方法1(method_1)我是陈毓端,您执行的是方法1(method_2):method_2

好了这个流程完毕。







===============================万恶的分割线=========================

分享到:
评论

相关推荐

    linux Qt 生成so库,与调用so库实例

    在本实例中,我们将探讨如何利用Qt来生成动态链接库(.so库)以及如何在其他项目中调用这个库。 首先,让我们详细了解一下创建.so库的步骤: 1. **创建项目**:在Qt Creator中,选择“新建项目” -&gt; “Qt” -&gt; ...

    delphi编写so库,及调用实例,linux下运行,Deepin系统

    在Unix-like系统(包括Linux)中,`.so`文件是Shared Object Library的缩写,相当于Windows系统中的动态链接库(.dll)。这些库可以在多个进程之间共享,从而节省内存并简化程序的更新。 要使用Delphi创建.so库,...

    java调用C语言编写的so库中的函数,java调用C语言编写的dll库中的函数

    本文将深入探讨这两种方法,以及如何在Java中调用C语言编写的SO(Linux下的动态链接库)和DLL(Windows下的动态链接库)中的函数。 首先,JNI是Java官方提供的原生接口,允许Java代码直接与本地代码交互。在Java中...

    linux环境中c++调用lua动态链接库以及编译方法

    在Linux系统中,动态链接库通常以`.so`为后缀,代表"shared object"。`liblua.so`包含了Lua的运行时环境和核心API,供C++代码使用。 **编译Lua动态链接库:** 1. 下载Lua源码包,如`lua-5.x.x.tar.gz`。 2. 解压并...

    linux动态链接库的开发实例

    在Linux系统中,动态链接库(Dynamic Linking Library,通常以`.so`为后缀)是一种重要的编程资源,它允许多个程序共享同一份代码,从而节省内存并方便代码维护。本教程将通过一个实例深入探讨Linux下C/C++语言如何...

    linux中php调用so

    SO文件是Linux下的动态链接库,相当于Windows系统中的DLL文件。本篇文章将深入探讨如何在PHP中使用SO文件,以及相关知识点。 1. PHP与动态链接库: PHP本身是一个解释型语言,但为了提升性能或实现特定功能,可以...

    LINUX动态库.so嵌套.so文件

    在Linux系统中,动态库(.so文件)是程序运行时加载的共享对象,它们提供了函数和数据供其他程序调用。"LINUX动态库.so嵌套.so文件"的主题涉及了如何在一个动态库中嵌入另一个动态库,这种技术通常用于代码重用和...

    linux下生成和调用SO库文件的程序示例

    在Linux操作系统中,动态链接库(Shared Object,简称SO)是一种可被多个程序共享的代码库,它能够减少内存占用并提高系统效率。本示例将深入探讨如何生成SO库文件以及如何在程序中调用这些库。我们将分为以下几个...

    linux下生成so文件并且调用so文件的方法

    1. 链接SO文件:在编写使用SO文件的程序时,可以使用`-l`选项链接库。假设我们有主程序`main.c`: ```c // main.c extern void myfunc(); int main() { myfunc(); return 0; } ``` 编译并链接到`libmyfunc.so`...

    vs2015跨平台linux开发so库例子

    标题中的“vs2015跨平台Linux开发so库例子”指的是使用Visual Studio 2015进行跨平台开发,创建适用于Linux系统的动态链接库(.so文件)。Visual Studio 2015引入了对Linux开发的支持,允许开发者在Windows环境下...

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

    在Linux系统中,动态链接库(Dynamic Linking Library,通常以`.so`为扩展名)是一种重要的编程资源,它允许程序共享代码,从而节省内存并提高执行效率。本篇文章将深入探讨如何创建和使用`.so`文件,以及相关的重要...

    PHP调用C/C++生成的.so库的详细笔记

    在Linux系统中,.so文件是共享对象(Shared Objects),相当于Windows平台下的.DLL动态链接库。它们包含了可执行代码和数据,可供多个程序同时使用,减少了内存占用。 要将C/C++代码集成到PHP中,我们需要经历以下...

    JNA调用.dll文件或.so动态链接库的代码demo

    在标题中提到的“JNA调用.dll文件或.so动态链接库的代码demo”,这是一个实际应用JNA来调用本地动态库的示例。下面我们将深入探讨JNA的工作原理、使用步骤以及如何处理.dll和.so文件。 1. **JNA工作原理**: JNA...

    linux动态库so的调用(c语言)

    在Linux系统中,动态库...总结,Linux下的C语言程序调用动态库.so主要涉及编译、链接、运行时加载和调用等多个步骤。了解这些知识有助于在Linux环境下开发和管理C程序,特别是当需要利用已有的库函数或者模块时。

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

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

    linux创建和使用动态链接库.so文件

    ### Linux 创建和使用动态链接库 .so 文件 在 Linux 系统中,动态链接库(Dynamic Link Library,简称 DLL)通常以 `.so` 文件的形式存在,即 Shared Object 文件。动态链接库可以被多个程序共享使用,有助于减少...

    so编写和Python调用.so文件

    本教程聚焦于如何在Linux环境下使用C++编写`.so`动态链接库,并通过Python进行调用,这对于初学者来说是一个很好的实践项目。`.so`文件是Linux系统中的动态链接库,它包含可被其他程序共享的函数和数据。 首先,...

    易语言调用linux函数

    首先,`load_so`通常指的是加载共享对象(Shared Object),在Linux系统中,动态链接库文件的扩展名为`.so`。通过`dlopen()`函数,我们可以加载一个动态链接库到进程空间中。`dlopen()`函数需要传递动态链接库的路径...

    springboot+jna/jni调用动态so/dll库

    "springboot+jna/jni调用动态so/dll库"是一个重要的主题,它涉及到Spring Boot应用如何利用Java Native Interface (JNI) 和 Java Native Access (JNA) 这两种技术来调用操作系统级别的动态链接库(.so for Linux, ....

    使用c语言编写动态链接库(linux下.so文件,windows下dll文件),使用python调用c语言接口。.zip

    本示例涉及到的是使用C语言创建动态链接库,并在不同的操作系统环境下——Linux(生成`.so`文件)和Windows(生成`.dll`文件)——进行实现。之后,我们还将讨论如何通过Python语言调用这些C语言编写的接口。这一...

Global site tag (gtag.js) - Google Analytics