为了不暴露源码,将c文件生成so动态库来给别人调用
记录一下方法
首先简单的创建一些测试文件:test.h a.c b.c c.c
如下:
test.h

#include <stdio.h>void a();
void b();
void c();

a.c

#include "test.h"void a()
{printf("aaa\n");
}

b.c

#include "test.h"void b()
{printf("bbb\n");
}

c.c

#include "test.h"void c()
{printf("ccc\n");
}

执行下面命令生成so文件:

gcc a.c b.c c.c -fPIC -shared -o libtest.so


下面写一个测试程序test.c,调用该so文件是否正常:
test.c

#include "test.h"int main()
{a();b();c();return 0;
}

执行下面命令生成test可执行文件:

 gcc test.c -L. -ltest -o test


下面执行看下结果:

可以看到能调用函数,证明so文件没问题。
对上面一些参数解释:
-shared该选项指定生成动态连接库(让连接器生成T类型的导出符号表,有时候也生成弱连接W类型的导出符号),不用该标志外部程序无法连接。相当于一个可执行文件

-fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。

-Lxxx:xxx表示指定库所在的位置,因为我是当前目录,所以是-L.

-ltest:编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.so来确定库的名称( l 的意思是lib,ltest即是去找libtest这个so)

下面介绍一下两个so相关命令
ldd

nm命令

可以看出so包含的三个函数,还有其它信息有兴趣自行看资料。

Linux 生成so库文件并调用相关推荐

  1. Linux系统上库文件的生成与使用(静态库和动态库)

    目录 1.什么是库文件? 2.静态库的生成与使用 2.1.生成 .o 文件 2.2.创建静态库 2.3.使用静态库 3.动态(共享)库的生成与使用 3.1.生成 .o 文件 3.2.生成动态库文件 3 ...

  2. linux编译ffmpeg成so,「ffmpeg」一 mac 环境下编译ffmpeg,生成so库文件

    1.下载ffmpeg源码,官网,我这里直接采用git 方式下载: 下载ffmpeg.png 终端输入git命令: 静静等待~ 最后下载的版本为3.4.6 . image.png 这里注意一下,刚开始我 ...

  3. linux的库文件路径,Linux下的库文件搜索路径

    对于以压缩包发布的软件,在它的目录下通常都有一个配置脚本configure,它的作用确定编译参数(比如头文件位置.连接库位置等),然后生成Makefile以编译程序.可以进入该软件的目录,执行&quo ...

  4. 在Keil C51下生成LIB库文件以及如何使用LIB库文件

      如何生成LIB库文件 1.首先准备好生成LIB库文件对应的.c和.h文件,在这里用到的.c和.h文件分别是: "reg303.h" "rjwf303_flash.h& ...

  5. automake生成静态库文件_Automake 详解

    automake配置 一.安装 命令:sudo apt-get install automake 二.配置过程 1. 使用Autoscan工具生成configure.ac文件 命令: autoscan ...

  6. g++ 生成C++ .so库文件,并调用示例

    Tags: g++ C++ so library 在Linux系统下用g++命令编译C++程序.也可以生成so,a链接库 示例一 编译时链接so库 Test.h 文件内容 Main.cpp文件内容 命 ...

  7. automake生成静态库文件_动手 | 奶奶级的动态库入门

    程序编译过程 库文件 静态链接和动态链接的区别? 从0开始 - 创建和使用静态链接库 创建静态库项目 向静态库中添加文件 编译静态库 创建引用静态库的C++控制台应用 在应用中使用静态库功能 从0开始 ...

  8. automake生成静态库文件_基于CocoaPods的组件化原理及私有库实践

    轮子为什么会存在 智人能在残酷的进化大战中存活下来,原因之一就是智人懂得将知识沉淀成外物,辅助彼此之间的合作,从而使得整个群体产生了规模效应,即1+1>2的效果. 从一个角度上说,石器时代是基于 ...

  9. C++编写库文件以及调用

    我们在日常编码中,可能会出现这样一种情况:我们要将我们写好的函数或者类提供给别人,但是我们只想给他提供接口而不想让他了解到函数的具体细节.这时我们可以将我们的函数封装成库然后和头文件一起提供给他,这样 ...

  10. 关于linux下的库文件

    先说说库文件是怎么来的吧. 以C为例,我们写一个程序,一般都不会把所有的函数都写在一个文件里面,通常都是划分模块,然后一个模块若干个文件,然后在main文件里面调用这些模块.我这里用一个magic.c ...

最新文章

  1. MLIR中间表示与编译
  2. 计算相机采集帧率C实现
  3. python自带 python2转python3 代码工具
  4. new Map的妙用
  5. php通用的树型类创建无限级树型菜单
  6. linux如何加设磁盘配额,Linux系统攻略:如何为添加的硬盘做配额
  7. LOJ洛谷P1248加工生产调度(贪心、Johnson 法则)
  8. python数据分析架构_Python数据分析
  9. JS创建对象的模式介绍
  10. Silverlight 用户代码未处理 TypeLoadException
  11. 李宏毅机器学习hw1~4作业 强化点
  12. toolchain安装教程支持_toolchain
  13. 推荐Linux音乐播放器:咪咕音乐
  14. 深度学习GPU最全对比,到底谁才是性价比之王?
  15. ZooKeeper session has been expired
  16. Mac系统如何显示隐藏文件
  17. 【RPC】序列化与反序列化
  18. Ubuntu20.04安装Docker以及Docker安装微信、企业微信、Docker常用命令
  19. kafka-topics.sh java.rmi.server.ExportException: Port already in use: 5555
  20. 华为畅享10s值得买吗_【华为畅享10S怎么样华为畅享10s评测】屏幕_摘要频道_什么值得买...

热门文章

  1. CodeForces - 1538G Gift Set - ( 二分 )
  2. C++ deque类使用详解
  3. worldpress小工具自定义html,WorldPress Grid html代码设置浅析,代码非常简洁
  4. 趣图 | EDG牛逼!!!
  5. 联想笔记本电脑开机无法修复计算机,联想笔记本开机没反应怎么办 笔记本无法开机的解决方法...
  6. 按头安利 好看又实用的相机 单反免抠元素素材看这里
  7. matlab绿屏抠像代码,DV影像素材抠像效果研究
  8. 电脑系统坏了怎么修复
  9. 缺少空格:The JSP specification requires that an attribute name is preceded by whitespace
  10. 论文阅读: Inertia Tensor Properties in Robot Dynamics Identification: A Linear Matrix Inequality Approac