文章分类: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
好了这个流程完毕。
===============================万恶的分割线=========================
分享到:
相关推荐
创建步聚:创建项目-》先lib选项,一直Next,根据实例写库,构建生成.so库。 调用:右键添加外部库-》修改pro文件-》添加头文件-》创建对象-》调用应库函数。
在linux下,java调用c语言编译的*.so动态链接库的小例子.是一个简单计算器的例子.在java中传操作数和操作符,由C来计算,把结果传过来给java.
动态链接库与普通的程序相比而言,没有main函数,是一系列函数的实现。通过shared和fPIC编译...例如下面实现一个简单的整数四则运输的动态链接库,定义的caculate.h和caculate.c两个文件,生产libcac.so动态链接库。
1.java调用动态链接库实例 2.包含so库的生成实例 3.java调用so的实例
LINUX创建与使用动态链接库并不是一件难事。编译函数源程序时选用-shared选项即可创建动态链接库,注意应以.so后缀命名,最好放到公用库目录(如/lib,/usr/lib等)下面,并要写好用户接口文件,以便其它用户共享。使用...
内含dll/so文件的简单封装及调用的两个例子程序,亲测可用。
完整演示使用JNI开发JAVA和C++交互的例子,本示例提供了在Windows和linux上的编译脚本。请参考JNI的相关文章,如有疑问可留言
非QT 等界面形式进行大华SDK的调用,主要就是解决Linux下调用大华SDK时所遇到的环境搭建问题。
例如下面实现一个简单的整数四则运输的动态链接库,定义的caculate.h和caculate.c两个文件,生产libcac.so动态链接库。 针对二进制文件有用的命令 查看文件类型 file 查看二进制文件链接到哪些库 ldd 查看二进制...
动态链接库文件名是: libggg.so 头文件是: get.h 提供这样两个函数调用接口: int get (); int set (int a); 要生成这样一个动态链接库,我们首先编写这样一个头文件: CODE: [Copy to clipboard] /************...
1、TensorFlow C++ API的编译是线上使用TensorFlow C++ API调用预先训练好的模型完成预测项目的必经之路...2、Linux环境下编译TensorFlow C++ API生成的动态链接库:libtensorflow_cc.so,libtensorflow_framework.so。
tess4j微服务或maven项目的jar包自带window的动态链接库文件,但是不适配linux,需要自行编译创建,使用版本tesseract-4.1.1.tar.gz、leptonica-1.74.4,编译比较耗时繁琐,以来的库比较多,使用直接将解压后的文件...
动态链接库在Windows中为.dll文件,在linux中为.so文件。以linux平台为例说明python调用.so文件的使用方法。 本例中默认读者已经掌握动态链接库的生成方法,如果不太清楚的可以参考动态链接库的使用 调用上例动态...
3、用到的.so动态链接库,均在ffmpeg-3.0.2-1.2-linux-x86_64.jar和opencv-3.1.0-1.2-linux-x86_64.jar; 4、在JAVA调用ffmpeg操作时,java要导入上面的jar。 5、在centos 6和centos 7中测试通过。 6、Windows 64位...
Linux系统下调用动态库(.so) 1、linuxany.c代码如下: #include "stdio.h" void display(char* msg){ printf("%s\n",msg); } int add(int a,int b){ return a+b; } 2、编译c代码,最后生成Python可执行的....
1.该程序是基于OpenSSL的使用纯C语言来实现RSA加解密的,在Linux环境下开发完成,...4.该程序包中提供有可供二次开发的接口源文件和可在Linux下使用的.so动态链接库文件; 5.该程序包中提供了相应功能的测试小程序。
hooksohookso是一个linux动态链接库的注入修改查找工具,用来修改其他进程的动态链接库行为。功能让某个进程执行系统调用让某个进程执行.so的某个函数给某个进程挂接新的.so卸载某个进程的.so把旧.so的函数或某个...
Windows下动态库是以.lib和.dll为扩展名的,而在Mac下,库是以.a和.dylib为扩展名的,Linux下则是以.a和.so为扩展名的,分别如下所示
2、动态链接库(.so): 动态库还分为两种用法: a) 应用程序运行期间链接动态库,但是在编译期间声明动态库的存在,也是说这种动态库必须在编译时对编译器可见,但编译器却不将此种库编译进可执行文件; b) 在运行...
p鹏 简介 Kunpeng是一个Golang编写的开源POC检测框架,集成了包括数据库,中间件,web...运行环境:Windows,Linux,Darwin工作形态:动态链接库,so,dll,dylib,go插件 404StarLink 2.0-银河 Kunpeng是404Team中的