gcc 编译两个so其中soA依赖soB

2023-05-16

有两个so,其中soB中调用soA;

那么我们打包soB的时候连接soA;

在打包test程序的时候连接soB,此时soB会自动查找依赖的soA;

如下测试

在编译之前指定环境变量:export LD_LIBRARY_PATH=./

soA

#include <stdio.h>

int add(int a,int b){
	return (a+b);
}

 编译成so

	gcc -shared -fPIC -o libadd.so add.c

  

soB

#include <stdio.h>

extern int add(int a,int b);

int cal(int a,int b){

	return (add(a,b)+1);

}

  编译成so,编译时连接soA,就是 -ladd

	gcc -shared -fPIC -o libcal.so cal.c -L. -ladd

  

测试程序test.c

#include <stdio.h>


extern int cal(int a,int b);

int main(void)
{
	printf("%d\n",cal(11,10));
	return 0;
}

  编译测试程序,这里我们只是连接了cal,没连接add

	gcc test.c  -o test -L. -lcal

 

最后运行test

 

由于我们前面指定的环境变量,可以这么做,如果不指定环境变量,默认会从系统的库路径下查找,那么找不到so,就无法编译我们的测试程序;

完整的Makefile

all:

	gcc -shared -fPIC -o libadd.so add.c
	gcc -shared -fPIC -o libcal.so cal.c -L. -ladd
	gcc test.c  -o test -L. -lcal


clean:
	rm -rf test
	rm -rf *.so  

 

使用之前要提前设置环境变量;

 

 

  

 

转载于:https://www.cnblogs.com/cocoajin/p/10904646.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gcc 编译两个so其中soA依赖soB 的相关文章

  • platform下的js分析_2

    目录 主要包含 url js utils js requiring frame js attribute js CCMacro js CCSys js CCScreen js CCVisibleRect js callbacks invok
  • 重学前端学习笔记(六)--JavaScript类型有哪些你不知道的细节?

    笔记说明 重学前端是程劭非 xff08 winter xff09 前手机淘宝前端负责人 在极客时间开的一个专栏 xff0c 每天10分钟 xff0c 重构你的前端知识体系 xff0c 笔者主要整理学习过程的一些要点笔记以及感悟 xff0c
  • 用nvm安装node后,发现npm下载总是失败的解决办法

    用nvm安装node后 xff0c 发现npm下载总是失败的解决办法 执行安装命令如下出现npm下载失败 xff0c 尝试多次都不成功 xff1a C windows system32 gt nvm install 14 17 3 Down
  • OpenStack —— DevStack一键自动化安装

    一 DevStack介绍 Devstack 目前是支持Ubuntu16 04和CentOS 7 xff0c 而且Devstack官方建议使用Ubuntu16 04 xff0c 所以我们使用Ubuntu 16 04进行安装 默认无论是Devs
  • 树莓派3b+安装

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 一 贴散热片 xff1a 背面一片 xff0c 正面两篇 二 系统安装 xff1a 1 使用SD Formatter格式化SD卡 2 使用Win32DiskImager写入
  • Amap地图轨迹

    最近在做运动相关的项目 xff0c 需要运动轨迹 xff0c 接了一下Google xff0c 头一天还能获取Location xff0c 之后就没法用了 xff0c 所以换成高德 xff0c 高德的地图包Amap 使用高德地图定位Loca
  • 实现一个最小的 CSS 响应式布局系统

    阳光里她在院子中央晾晒着衣裳 在四季的风中她散着头发安慰着时光 赵雷 南方姑娘 响应式布局系统 xff0c 在现在流行的 CSS 框架中已经非常常见了 它主要由容器类和约定一行列数的栅格系统组成 xff0c 组成了一个框架的骨架 在流行的前
  • 写了一个拖动排序插件

    drag js drag js是一款拖动排序插件 xff0c 适配pc端和手机端 demo地址 tls1234 github io drag html 结构 lt ul class 61 34 item group 34 gt lt li
  • 关于工程效能的思考

    继阿里大中台之后 xff0c 现在的科技公司大多有一支致力于提升公司研发效率和沟通协作的工程效能团队 xff0c 作为这样团队的一员 xff0c 却看到愿景和现实激烈碰撞 xff0c 不禁有如下思考 效率的提升并不能减少工作时长 就拿前端研
  • May-周记(1)

    1 封装一个ajax span class hljs comment 封装一个ajax原生写法 span span class hljs function span class hljs keyword function span span
  • 程序员从阿里、京东、美团…面试回来,这些面试题你都会吗?

    面试 xff0c 难还是不难 xff1f 最终结果好还是不好 xff1f 取决于面试者的底蕴 xff08 气场 43 技能 xff09 心态和认知以及沟通技巧 而一些主流的大型互联网公司面试 xff08 阿里巴巴 京东 美团 滴滴 xff0
  • js深拷贝和浅拷贝

    数组的深浅拷贝 浅拷贝 var arr 61 span class hljs string 34 One 34 span span class hljs string 34 Two 34 span span class hljs strin
  • OpenGL/OpenGL ES入门:纹理初探 - 常用API解析

    系列推荐文章 xff1a OpenGL OpenGL ES入门 xff1a 图形API以及专业名词解析 OpenGL OpenGL ES入门 xff1a 渲染流程以及固定存储着色器 OpenGL OpenGL ES入门 xff1a 图像渲染
  • 获取hadoop集群资源信息

    根据hadoop提供的restful接口获取 http hadoop apache org docs stable gt YARN REST APIs gt Resource Manager 1 获取每个node的信息 import url
  • java版电子商务spring cloud分布式微服务b2b2c社交电商 (八)springboot整合mongodb

    电子商务社交平台源码请加企鹅求求 xff1a 三五三六二四七二五九 准备工作 安装 MongoDBjdk 1 8maven 3 0idea 环境依赖 在pom文件引入spring boot starter data mongodb依赖 xf
  • 金丝雀发布、滚动发布、蓝绿发布到底有什么差别?关键点是什么?

    为什么80 的码农都做不了架构师 xff1f gt gt gt 根据 2017 年的 DevOps 发展报告 xff0c 高效能组织和低效能组织在软件交付的效率上有数量级上的差异 技术组织的软件交付能力是一种综合能力 xff0c 涉及众多环
  • MongoDB的无缝集成,重拾后端之Spring Boot

    MongoDB是什么 xff1f MongoDB是一个NoSQL数据库 xff0c 是NoSQL中的一个分支 xff1a 文档数据库 和传统的关系型数据库比如Oracle SQLServer和MySQL等有很大的不同 传统的关系型数据库 x
  • 关于区块链智能合约的真相

    2019独角兽企业重金招聘Python工程师标准 gt gt gt title 关于智能合约的真相 就像 区块链 xff0c AI 和 云 这样的词语一样 xff0c 智能合约 也是那些得到大量炒作的短语之一 毕竟 xff0c 没有什么比不
  • 访问者模式

    2019独角兽企业重金招聘Python工程师标准 gt gt gt https blog csdn net jason0539 article details 45146271 转载于 https my oschina net u 2511
  • zip不是内部或外部命令,也不是可执行程序”详细解决办法

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 书中第11章学习实例 xff1a 将文件备份成一个zip文件 xff08 python实现 xff09 书中源码 xff08 文件目录是自己新建文件夹的路径 xff0c 和

随机推荐

  • Struts2学习:HelloWorld

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 项目结构 xff1a 1 用IDEA新建一个SpringBoot 43 Maven的项目 2 新建的项目是没有webapp WEB INF 与web xml文件的 xff0
  • 泛型--继承泛型

    2019独角兽企业重金招聘Python工程师标准 gt gt gt package com atguigu javase generic import java util ArrayList import java util List im
  • springboot之读取配置文件

    1 propertie配置读取数据 通过value取配置文件中的数据 64 Component 64 PropertySource value 61 34 config db config properties 34 public clas
  • Kotlin与Java互操作

    1 xff0c Kotlin 调用Java import java util fun demo source List lt Int gt val list 61 ArrayList lt Int gt for item in source
  • Oracle基础和进阶笔记第二篇

    Oracle的中级操作部分 六 索引1 索引的特点2 索引的创建 七 视图1 普通视图2 物化视图 八 序列1 序列创建语法 九 触发器1 触发器的语法2 替代触发器3 系统触发器 十 游标1 一般游标创建2 静态隐式游标3 静态显示游标4
  • Python 工匠:使用装饰器的技巧。

    作者 xff1a piglei xff08 本文来自作者投稿 xff09 前言 装饰器 xff08 Decorator xff09 是 Python 里的一种特殊工具 xff0c 它为我们提供了一种在函数外部修改函数的灵活能力 它有点像一顶
  • AI听6秒语音就能知道你的长相

    声音可以暴露很多讯息 xff0c 麻省理工学院 xff08 MIT xff09 最近一项研究发现 xff0c 经过训练的 AI 不仅能从声音辨别出性别 年龄和种族 xff0c 甚至能猜出这人大概长什么样子 这些 秘密 都藏不住了 研究人员用
  • selenium编程01-简单163邮箱登陆登出_模块化

    from selenium import webdriver from time import sleep class Login def init self driver self driver 61 driver def login s
  • 163music 反爬分析

    网易163 音乐的 mp3下载 view source https music 163 com playlist id 61 924680166 这个是网页源代码 链接 中间的 拿不到具体的数据 所以获取页面的时候 要去除 http mus
  • 二层链路聚合实验

    交换机1 xff1a ystem view vlan 10 vlan 20 qu interface range g1 0 1 to g1 0 2 port link type access port access vlan 10 qu i
  • plsql

    1 添加快捷键设置 摘抄自https www cnblogs com guangxiang p 9487132 html 汉化版 xff1a 工具 首选项 用户界面 编辑器 自动替换 定义文件 英文版 xff1a Tools gt Perf
  • 如何利用python制作微信好友头像照片墙?

    这个不难 xff0c 主要用到itchat和pillow这2个库 xff0c 其中itchat用于获取微信好友头像照片 xff0c pillow用于拼接头像生成一个照片墙 xff0c 下面我简单介绍一下实现过程 xff0c 代码量不多 xf
  • 软件需求工程与UML建模第二周工作总结

    项目范围 xff1a 1 能够实现仅弹道技能的躲避训练和带有技能发射主体的技能躲避训练 2 要能够玩家自由选择角色进行训练 3 要能够实现包含技能躲避 1v1对线训练等多模式选择的训练方式 4 要能够快捷进行多次练习 xff0c 我们计划加
  • 阻塞和非阻塞~

    很清楚 先记下 https www zhihu com question 19732473 answer 14413599 转载于 https www cnblogs com Mickey697 p 10863679 html
  • vnc利用ps命令查看所有DISPLAY

    ps aux grep vnc 使用该命令可以看到详细的vnc进程和使用的DISPLAY和DISPLAY的分辨率
  • 基础数据类型的补充,编码的进阶,基础数据类型之间的转换

    1 内容总览 基础数据类型的补充数据类型之间的转换 其他数据类型转成bool值为False的情况编码的进阶 2 具体内容 数据类型的补充 str 6个 code str xff1a 补充的方法练习一遍就行 6个 s1 61 39 taiBA
  • Keepalived

    Keepalived双机热备 Keepalived简介 Keepalived是使用C语言编写的路由热备软件 xff0c 该项目软件的主要目标是为Linux系统提供简单高效的负载均衡及高可用解决方案 负载均衡架构依赖于知名的IPVS xff0
  • Scyther 形式化分析工具资料整理(三)

    1 作者Cas Cremers在做TLS1 3的时候我么发现并没有使用Scyther 形式化丰分析工具对其进行分析 xff0c 而是使用了 The Tamarin 作者建立了TLS 13的模型 那么我的目标是 使用Scyther工具对TLS
  • java产生随机数的三种方式

    public class Test public static void main String args Random类 创建随机数对象有2种 一种是添加参数 也叫种子 这种方式创建出来的数 刷新后不会改变 相当于常量了 主要方法 nex
  • gcc 编译两个so其中soA依赖soB

    有两个so xff0c 其中soB中调用soA xff1b 那么我们打包soB的时候连接soA xff1b 在打包test程序的时候连接soB 此时soB会自动查找依赖的soA xff1b 如下测试 在编译之前指定环境变量 xff1a ex