解决QZ-SDK静态库libRPToolLib.a中avfoundation.o文件和kxMovie依赖的ffmpeg静态库libavdevice.a函数重复定义的问题

在原来项目中导入全志v3相机的SDK静态库libRPToolLib.a,编译通过,但链接报错,具体如下:
 
 

问题描述:

libRPToolLib.a和libavdevice.a两个第三方库都包含avfoundation.o这个文件,这两个.o中定义了相同的函数名。C语言全局函数,名称不能重复。
 

解决方案:

在i386、x86_64 和 armv7、arm64四个平台下分别解压libRPToolLib.a这个库,分别删除4个平台.a中的avfoundation.o文件,然后再重新合并成新的libTPToolLib.a
 

参考文章:

 
 

具体做法:

1. 建个文件夹lib,把libRPToolLib.a 拷贝到目录下,查看libRPToolLib.a 是否为多架构.a
cd lib
lipo -info libRPToolLib.a

打印:
Architectures in the fat file: libRPToolLib.a are: i386 armv7 x86_64 arm64
结论:
libRPToolLib.a是多框架库,故在lib文件夹下分别建立i386 armv7 x86_64 arm64四个子文件夹,便于数据处理


2. 提取某个框架的.a
lipo libRPToolLib.a  -thin  armv7  -output  armv7/libRPToolLib-armv7.a


3.当前在lib目录,cd到下级目录,并解压缩刚生产的.a

cd armv7 && ar xv libRPToolLib-armv7.a
 
4.找到冲突的包,删除avfoundation.o(可先在finder中找到并选中该avfoundation.o,执行如下命令后,再去finder中查看,该文件的确被删除了)
rm  avfoundation.o

5. cd到上一级,并重新打包刚解压缩目录下所有的.o成为一个新的某个框架下的.lib(armv7平台包)

cd ..  &&  ar  rcs  libRPToolLib-armv7.a   armv7/*.o //将armv7/目录下所有.o打包成 libRPToolLib-armv7.a,存储在lib文件夹下



6. 重复以上步骤,处理i386/x86/armv7/arm64框架的.a

7. 合并为模拟器和真机通用的fat file类型的.a

lipo -create libRPToolLib-armv7.a  libRPToolLib-arm64.a  libRPToolLib-i386.a    libRPToolLib-x86_64.a   -output  libRPToolLib.a

主要的终端指令如下:



lipo libRPToolLib.a  -thin  armv7  -output  armv7/libRPToolLib-armv7.a

cd armv7 && ar xv libRPToolLib-armv7.a

rm  avfoundation.o

cd ..  &&  ar  rcs  libRPToolLib-armv7.a   armv7/*.o



lipo libRPToolLib.a  -thin  arm64  -output  arm64/libRPToolLib-arm64.a

cd arm64 && ar xv libRPToolLib-arm64.a

rm  avfoundation.o

cd ..  &&  ar  rcs  libRPToolLib-arm64.a   arm64/*.o



lipo libRPToolLib.a  -thin  i386  -output  i386/libRPToolLib-i386.a

cd i386 && ar xv libRPToolLib-i386.a

rm  avfoundation.o

cd ..  &&  ar  rcs  libRPToolLib-i386.a   i386/*.o

lipo libRPToolLib.a  -thin  x86_64  -output  x86_64/libRPToolLib-x86_64.a

cd x86_64 && ar xv libRPToolLib-x86_64.a

rm  avfoundation.o

cd ..  &&  ar  rcs  libRPToolLib-x86_64.a   x86_64/*.o



lipo -create libRPToolLib-armv7.a  libRPToolLib-arm64.a  libRPToolLib-i386.a    libRPToolLib-x86_64.a   -output  libRPToolLib.a
 

操作截图:

 
 

 

解决QZ-SDK静态库libRPToolLib.a中avfoundation.o文件和kxMovie依赖的ffmpeg静态库libavdevice.a函数重复定义的问题的更多相关文章

  1. 转载:Windows下stdlib.h与glut.h中exit()函数重复定义的解决方案

    最近用到 OpenGL的第三方库Glut,碰到了exit()这个函数在stdlib.h与glut.h两个头文件中重复定义的情况,解决方案如下: 打开glut.h,找到exit()函数定义的地方(144 ...

  2. node静态资源服务器的搭建----访问本地文件夹(搭建可访问静态文件的服务器)

    我们的目标是实现一个可访问静态文件的服务器,即可以在浏览器访问文件夹和文件,通过点击来查看文件. 1.先创建一个文件夹anydoor,然后在该文件夹里npm init一个package.json文件, ...

  3. c++中的函数重载、函数重写、函数重定义

    目录 一.函数重载 二.函数重写 三.函数重定义 为了更加深刻的理解 函数重载.重写.重定义,我们可以带着如下这两个问题去思考: 1.子类中是否可以定义父类中的同名成员?为什么? 可以,因为子类与父类 ...

  4. python中的PYC文件是什么?

    1. Python是一门解释型语言吗? 我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在.如果是解释型语言 ...

  5. 解决 “MoveFile”: 类型库“XXX.dll”中的标识符已经是宏;使用“rename”限定符 类型库符号与系统符号冲突问题

    今天在VS工程当中引入一个组件,编译的时候出现警告, “MoveFile”: 类型库“XXX.dll”中的标识符已经是宏:使用“rename”限定符.虽然只是一个警告,但看着实在不爽,更重要的是,警告 ...

  6. Qt5.7中使用MySQL Driver(需要把libmysql.dll文件拷贝到Qt的bin目录中。或者自己编译的时候,链接静态库)

    Qt5.7中使用MySQL Driver 1.使用环境 Qt5.7的安装安装就已经带了MySQL Driver,只需要在安装的时候选择一下即可.如果没有安装,可以采取自己编译的方式.在Qt的源码包的q ...

  7. 反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) C#中缓存的使用 C#操作redis WPF 控件库——可拖动选项卡的TabControl 【Bootstrap系列】详解Bootstrap-table AutoFac event 和delegate的分别 常见的异步方式async 和 await C# Task用法 c#源码的执行过程

    反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑)   背景介绍: 为了平衡社区成员的贡献和索取,一起帮引入了帮帮币.当用户积分(帮帮点)达到一定数额之后,就会“掉落”一定数量的“帮帮 ...

  8. 目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”)。静态库是一个或者多个obj文件的打包

    前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”) ...

  9. oc工程中oc、swift混编代码打包成静态framework踩坑笔记

    参考资料: https://www.jianshu.com/p/734341f7c242 https://www.jianshu.com/p/55038871e7de   两天时间探索,期间不知道遇到 ...

随机推荐

  1. springboot 集成spring-session redis 实现分布式session

    gradle 添加依赖 compile("org.springframework.session:spring-session:1.3.0.RELEASE") compile(&q ...

  2. 使用sqlserver搭建高可用双机热备的Quartz集群部署【附源码】

    一般拿Timer和Quartz相比较的,简直就是对Quartz的侮辱,两者的功能根本就不在一个层级上,如本篇介绍的Quartz强大的序列化机制,可以序列到 sqlserver,mysql,当然还可以在 ...

  3. UVALive-5731

    UVALive-5731 题意 一颗 n - 1 条边的有向树,要求整棵树成为强连通图,一次操作即构建一条路(一笔画), 限制: 新建的路上的所有边必须与原有的边逆向,即构建的路必须在原有的边和点上, ...

  4. 使用 libdvm.so 内部函数dvm* 加载 dex

    首先要清楚,odex只是对代码段(我将dex文件与elf文件类比,大家都将执行文件分成不同的段)作优化,而其它用于类反射信息的段都应用原来的dex,所以odex文件内部还包含了一个dex. 打开一个d ...

  5. xcode8.3 shell 自动打包脚本 记录

    题记 xcode升级8.3后发现之前所用的xcode自动打包基本无法使用,因此在网上零碎找到些资料,将之前的脚本简化.此次脚本是基于xcode证书配置进行打包(之前是指定描述文件.相对繁琐).因此代码 ...

  6. 学习笔记TF022:产品环境模型部署、Docker镜像、Bazel工作区、导出模型、服务器、客户端

    产品环境模型部署,创建简单Web APP,用户上传图像,运行Inception模型,实现图像自动分类. 搭建TensorFlow服务开发环境.安装Docker,https://docs.docker. ...

  7. Java经典编程题50道之四十一

    海滩上有若干个一堆桃子,五只猴子来分.第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份. 第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中, ...

  8. javaCV开发详解之5:录制音频(录制麦克风)到本地文件/流媒体服务器(基于javax.sound、javaCV-FFMPEG)

    javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...

  9. 常见的Message Queue应用场景

    在最近的工作的里面有同事问到我说,为什么我们需要一个Message Queue,Message Queue可以在哪些地方用,经过一些整理,大概能找到这些点,假如你有这方面的要求,也可以考虑使用Mess ...

  10. MySQL优化之表结构优化的5大建议(数据类型选择讲的很好)

    殊不知,在N年前被奉为"圣经"的数据库设计3范式早就已经不完全适用了.这里我整理了一些比较常见的数据库表结构设计方面的优化技巧,希望对大家有用. 由于MySQL数据库是基于行(Ro ...