文章分类: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
好了这个流程完毕。
===============================万恶的分割线=========================
分享到:
相关推荐
在本实例中,我们将探讨如何利用Qt来生成动态链接库(.so库)以及如何在其他项目中调用这个库。 首先,让我们详细了解一下创建.so库的步骤: 1. **创建项目**:在Qt Creator中,选择“新建项目” -> “Qt” -> ...
在Unix-like系统(包括Linux)中,`.so`文件是Shared Object Library的缩写,相当于Windows系统中的动态链接库(.dll)。这些库可以在多个进程之间共享,从而节省内存并简化程序的更新。 要使用Delphi创建.so库,...
本文将深入探讨这两种方法,以及如何在Java中调用C语言编写的SO(Linux下的动态链接库)和DLL(Windows下的动态链接库)中的函数。 首先,JNI是Java官方提供的原生接口,允许Java代码直接与本地代码交互。在Java中...
在Linux系统中,动态链接库通常以`.so`为后缀,代表"shared object"。`liblua.so`包含了Lua的运行时环境和核心API,供C++代码使用。 **编译Lua动态链接库:** 1. 下载Lua源码包,如`lua-5.x.x.tar.gz`。 2. 解压并...
在Linux系统中,动态链接库(Dynamic Linking Library,通常以`.so`为后缀)是一种重要的编程资源,它允许多个程序共享同一份代码,从而节省内存并方便代码维护。本教程将通过一个实例深入探讨Linux下C/C++语言如何...
SO文件是Linux下的动态链接库,相当于Windows系统中的DLL文件。本篇文章将深入探讨如何在PHP中使用SO文件,以及相关知识点。 1. PHP与动态链接库: PHP本身是一个解释型语言,但为了提升性能或实现特定功能,可以...
在Linux系统中,动态库(.so文件)是程序运行时加载的共享对象,它们提供了函数和数据供其他程序调用。"LINUX动态库.so嵌套.so文件"的主题涉及了如何在一个动态库中嵌入另一个动态库,这种技术通常用于代码重用和...
在Linux操作系统中,动态链接库(Shared Object,简称SO)是一种可被多个程序共享的代码库,它能够减少内存占用并提高系统效率。本示例将深入探讨如何生成SO库文件以及如何在程序中调用这些库。我们将分为以下几个...
1. 链接SO文件:在编写使用SO文件的程序时,可以使用`-l`选项链接库。假设我们有主程序`main.c`: ```c // main.c extern void myfunc(); int main() { myfunc(); return 0; } ``` 编译并链接到`libmyfunc.so`...
标题中的“vs2015跨平台Linux开发so库例子”指的是使用Visual Studio 2015进行跨平台开发,创建适用于Linux系统的动态链接库(.so文件)。Visual Studio 2015引入了对Linux开发的支持,允许开发者在Windows环境下...
在Linux系统中,动态链接库(Dynamic Linking Library,通常以`.so`为扩展名)是一种重要的编程资源,它允许程序共享代码,从而节省内存并提高执行效率。本篇文章将深入探讨如何创建和使用`.so`文件,以及相关的重要...
在Linux系统中,.so文件是共享对象(Shared Objects),相当于Windows平台下的.DLL动态链接库。它们包含了可执行代码和数据,可供多个程序同时使用,减少了内存占用。 要将C/C++代码集成到PHP中,我们需要经历以下...
在标题中提到的“JNA调用.dll文件或.so动态链接库的代码demo”,这是一个实际应用JNA来调用本地动态库的示例。下面我们将深入探讨JNA的工作原理、使用步骤以及如何处理.dll和.so文件。 1. **JNA工作原理**: JNA...
在Linux系统中,动态库...总结,Linux下的C语言程序调用动态库.so主要涉及编译、链接、运行时加载和调用等多个步骤。了解这些知识有助于在Linux环境下开发和管理C程序,特别是当需要利用已有的库函数或者模块时。
本篇将详细介绍C语言在Windows和Linux系统下如何实现动态链接库的封装以及如何进行调用。 首先,我们来看看Windows系统下的DLL封装。DLL文件包含了可被其他程序调用的函数或数据。在C语言中,创建DLL通常涉及以下几...
### Linux 创建和使用动态链接库 .so 文件 在 Linux 系统中,动态链接库(Dynamic Link Library,简称 DLL)通常以 `.so` 文件的形式存在,即 Shared Object 文件。动态链接库可以被多个程序共享使用,有助于减少...
本教程聚焦于如何在Linux环境下使用C++编写`.so`动态链接库,并通过Python进行调用,这对于初学者来说是一个很好的实践项目。`.so`文件是Linux系统中的动态链接库,它包含可被其他程序共享的函数和数据。 首先,...
首先,`load_so`通常指的是加载共享对象(Shared Object),在Linux系统中,动态链接库文件的扩展名为`.so`。通过`dlopen()`函数,我们可以加载一个动态链接库到进程空间中。`dlopen()`函数需要传递动态链接库的路径...
"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语言编写的接口。这一...