.so文件的编译和调用
来源:互联网 发布:autodesk绘图软件 编辑:程序博客网 时间:2024/05/19 20:46
最近,在摸索一个开源项目,该项目是c++写的,为了能够使c++代码生成类似C#中.dll文件,然后直接的调用,我发现了.so文件有类似的用途。
文件后缀解释:
(1) .o,是目标文件,相对于windows中的.obj文件,它由.cpp文件编译生成,然后通过链接形成可执行文件。
(2) .so为共享库,是shared object,用于动态连接的,和dll差不多
(3) .a 为静态库,是好多个.o合在一起,用于静态连接
(4) .la为libtool自动生成的一些共享库,主要记录了一些配置信息。
接下来将举例来说明.so文件的生成和使用,下列例子有一个头文件:so_test.h,和3个.c文件:test_a.c, test_b.c, test_c.c,我们将这些文件编译成一个动态库:libtest.so
环境:linux环境
一.编译生成.so文件
so_test.h中的代码:
#include <stdio.h>#include <stdlib.h>void test_a();void test_b();void test_c();test_a.c中的代码:
#include "so_test.h"void test_a(){printf("this is in test_a...\n");}test_b.c中的代码:
#include "so_test.h"void test_b(){printf("this is in test_b...\n");}test_c.c中的代码:
#include "so_test.h"void test_c(){printf("this is in test_c...\n");}使用如下的命令将这几个文件编译成一个动态库:libtest.so
$ gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so二.链接动态库.so文件,并使用
通过上述的过程,我们已经了动态链接库libtest.so,下面我们通过test程序来调用这个库中的函数。该程序写在test.c中
test.c中的代码:
#include "so_test.h"int main(){test_a();test_b();test_c();return 0;}通过如下命令,将test.c与动态库libtest.so链接生成可执行文件test:
$ gcc test.c -L. -ltest -o test运行test
$ ./test将会有如下的结果出现,说明libtest.so的编译和使用成功
三.使用Scons来编译
1.在和.c文件相同的目录下创建SConstruct文件,该文件是一个python文件,是Scons编译的一个入口,并在里面写入如下的编译命令生成.so文件libtest.so
SharedLibrary('libtest', ['test_a.c', 'test_b.c', 'test_c.c'])2.将.so库文件与测试程序test.c链接成可执行文件
Program('test.c', LIBS=['libtest'], LIBPATH='.')执行test的过程如上,其结果是一样的,但是使用Scons编译更加的便捷。
阅读全文
0 0
- .so文件的编译和调用
- Linux编译.so文件,调用.so文件
- NDK so库的调用和编译
- NDK so库的调用和编译
- NDK so库的调用和编译
- NDK so库的调用和编译
- Android NDK开发(上)---jni的编译和调用so静态库文件
- so文件的编译
- NDK编译的so文件armeabi和armeabi-…
- android linux编译tensorflow的jar包和so文件
- 编程基础-----c++与c调用so文件/C和C++之间so库的互相调用/GCC -lm 是什么意思
- 在运行rcnn中,调用caffe编译好的matlab接口时,遇到 libmkl_rt.so和libcudart.so.5.5错误
- android 编译*.so文件 需要修改的*.mk文件和 shell文件
- Windows下编译使用Android NDK,调用SO文件
- Linuxgcc编译动态链接库*.so文件调用示例
- SO文件的编写,编译,使用方法
- php中调用so文件的例子
- python调用so的库文件方法
- VS快捷键
- R安装自己功能包脚本
- 微信支付接口(公众号支付)+微信支付回调函数 附代码(持续更新)
- NAND闪存可靠性概览
- 谈谈Go语言的字符串设计
- .so文件的编译和调用
- supervisor管理后台进程之flume
- FTPrep, 15 3Sum
- class
- MySQL 修改字段类型或长度
- asp.net core 相关网摘
- NOIP2013火柴排队
- 关于Android事件传递与分发
- 批量查询优化