解决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. 1.Java第一课:初识java

    今天也算是正式地开始学习Java了,一天学的不是太多,旨在入门了解Java.还好现在学的都是基础,也能赶得上进度,希望以后能一直保持这种精神状态坚持学下去.下面就简单来说说今天所学的内容吧. 1计算机 ...

  2. xtrabackup原理、备份日志分析、备份信息获取

    一. xtrabackup备份恢复工作原理: extrabackup备份简要步骤 InnoDB引擎很大程度上与Oracle类似,使用redo,undo机制,XtraBackup在备份的时候,以read ...

  3. python中的map、filter、reduce函数

    三个函数比较类似,都是应用于序列的内置函数.常见的序列包括list.tuple.str.   1.map函数 map函数会根据提供的函数对指定序列做映射. map函数的定义: map(function ...

  4. 读书笔记-你不知道的JavaScript(上)

    本文首发在我的个人博客:http://muyunyun.cn/ <你不知道的JavaScript>系列丛书给出了很多颠覆以往对JavaScript认知的点, 读完上卷,受益匪浅,于是对其精 ...

  5. Spring MVC 学习笔记一 HelloWorld

    Spring MVC 学习笔记一 HelloWorld Spring MVC 的使用可以按照以下步骤进行(使用Eclipse): 加入JAR包 在web.xml中配置DispatcherServlet ...

  6. JavaScript中对事件简单的理解(2)

    事件(event) event对象 (1)什么是event对象? Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态.事件通常与函数结合使用,函数不会 ...

  7. 静态代码块详解(原出处:http://versioneye.iteye.com/blog/1129579)

    一 般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情 况下,其他程序来调用的时候,需要使用静态方法,这种 ...

  8. fetch()的用法

    发起获取资源请求的我们一般都会用AJAX技术,最近在学习微信小程序的时候,用到了fetch()方法. fetch()方法用于发起获取资源的请求.它返回一个promise,这个promise会在请求响应 ...

  9. [0] Devexpress 控件参数集合

    gridview控件/统计功能 比如对“数量”列进行统计,只要在GridControl的设计器中设置SummaryItem:   SummaryItem.DisplayFormat = "{ ...

  10. 如何使用 ui-router-extras

    为了使用ui-router创建tabs构架,使用ui-router-extras 使用方法: 0. 安装包 bower install ui-router-extras --save-dev 1. 引 ...