我们是React Native项目,需要引入TXLiteAVSDK_Professional实现直播和连麦功能。已经实现Android版本,测试正常,但是iOS版本编译总出错。(Smart版本编译正常,仅Professional版本有错)
XCode编译错误消息如下:
duplicate symbol __celt_autocorr in:
/Users/chen/Develop/one/xqapp/ios/Pods/TXLiteAVSDK_Professional/TXLiteAVSDK_Professional/TXLiteAVSDK_Professional.framework/TXLiteAVSDK_Professional(celt_lpc.o)
duplicate symbol __celt_lpc in:
/Users/chen/Develop/one/xqapp/ios/Pods/TXLiteAVSDK_Professional/TXLiteAVSDK_Professional/TXLiteAVSDK_Professional.framework/TXLiteAVSDK_Professional(celt_lpc.o)
ld: 2 duplicate symbols for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
环境:
XCode10.3,TXLiteAVSDK_Professional 6.6.7758,React Native 0.61
查看了SDK里的文件,发现重复的celt_lpc.o,不知是否跟这个有关?
ar -t TXLiteAVSDK_Professional.arm64|grep -i celt
celt.o
celt_decoder.o
celt_encoder.o
celt_lpc.o
celt_lpc.o
celt_encoder.o
arm_celt_map.o
celt.o
celt_neon_intr.o
celt_decoder.o
要讲清楚这个问题,需要回顾历史。1996年11月,JavaScript的创造者Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望这种语言能够成为国际标准。次年,ECMA发布262号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言成为ECMAScript,这个版本就是1.0版。
该标准从一开始就是针对JavaScript语言制定的,但之所以不叫JavaScript,有两个原因。一是商标,Java是Sun公司的商标,根据授权协议,只有Netscape公司可以合法地使用JavaScript这个名字,且JavaScript本身也已经被Netscape公司注册为商标。二是想体现这门语言的制定者是ECMA,不是Netscape,这样有利于保证这门语言的开放性和中立性。因此,ECMAScript和JavaScript的关系是,前者是后者的规格(标准),后者是前者的一种实现(另外的ECMAScript方言还有Jscript和ActionScript)。在日常场合,这两个词是可以互换的。
ECMA是European Computer Manufacturers Association的缩写,即欧洲计算机制造商协会。欧洲计算机制造商协会是制定信息传输与通讯的国际化标准组织。
ECMAScript是ECMA制定的标准化脚本语言。
目前JavaScript使用的ECMAScript版本为ECMAScript-262。
ECMAScript被国际化标准组织采纳为ISO/IEC 16262。