webrtc静态库符号不全可能是符号文件缺失,建议重新更新下载。WebRTC是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点的连接,实现视频流和(或)音频流或者其他任意数据的传输。WebRTC包含的这些标准使用户在无需安装任何插件或者第三方的软件的情况下,创建点对点的数据分享和电话会议成为可能。
小编还为您整理了以下内容,可能对您也有帮助:
目录背景碰到的问题与解决总结macos嵌入webrtc流程
背景
近一段时间在开发MacOS下视频相关app,之前一直通过WebRTC.framework的形式引用webrtc的objc接口, 由于新的特性不仅需要oc接口,还需要使用WebRTC C++接口,因此需改成通过静态库链接webrtc.
碰到的问题与解决
对于iOS/macOS平台,开启openh264,去除test,使用如下命令
gn gen out/mac --args="proprietary_codecs=true use_openh264=true ffmpeg_branding="Chrome" rtc_include_tests=false"ninja -C out/mac怎样添加预编译静态库 libwebrtc
你好,
XCode项目中添加静态库的方法:1、右击target,选择add -> new target 2、在弹出的 NewTarget 界面中选择Cocoa Touch -> Static Library ,为新 library 取个名字。将源文件添加到这个库。可以直接拖动现存源文件,也可以右击 -> add 。注意选择新建的库为添加的 target 。3、设置原项目,令其使用新建的库。4、右击原项目的 target ,选择 getInfo 。5、选择 General 选项卡。6、向 linked libraries 中添加新创建的库 (即添加 .a 文件)。
如何添加预编译静态库 libwebrtc
你好,
XCode项目中添加静态库的方法:1、右击target,选择add -> new target 2、在弹出的 NewTarget 界面中选择Cocoa Touch -> Static Library ,为新 library 取个名字。将源文件添加到这个库。可以直接拖动现存源文件,也可以右击 -> add 。注意选择新建的库为添加的 target 。3、设置原项目,令其使用新建的库。4、右击原项目的 target ,选择 getInfo 。5、选择 General 选项卡。6、向 linked libraries 中添加新创建的库 (即添加 .a 文件)。
如何解决c程序中不同静态库之间的符号冲突问题
解决TencentOpenAPI.framework与ZbarSDK中 _base64_encode 函数的冲突
后来在网络上搜寻,删除掉 Other Linker Flag 的 -all_load 就可以解决静态库冲突的问题,
但是这样做的话,会使一些外部的静态库,使用objc扩展函数(catagory)的方法失效。例如BaiMapApi
如果是有些库使用到了扩展函数(catagory)可以分别对这个库进行加载
使用:-force_load
-force_load BaiMapApi/libs/Release-iphoneos/libmapapi.a
(BaiMapApi是添加到当前目录下的)
或
-force_load $(BUILT_PRODUCTS_DIR)/libxxx.a
(这里是直接添加静态库项目源码的做法)
使用-force_load分别进行加载还是蛮方便的,如果有些函数加入了main函数使用all_load就相当麻烦了。
以上可以解决TencentOpenAPI.framework与ZbarSDK的冲突
如果两个静态库冲突的结构是相同的,可以考虑将两个静态库拆分出来进行合并。
查看文件的架构有哪些
$ lipo -info libzbar.a
Architectures in the fat file: libzbar.a are: armv7 (cputype (12) cpusubtype (11)) i386
将armv7解压出来
lipo libzbar.a -thin armv7 -output libzbar-armv7.a
新建立一个文件夹出来存放解压的(.o)文件
$ mkdir armv7
$ cd armv7
将静态库中的文件解压
$ ar -x ../libzbar-armv7.a
如何添加预编译静态库 libwebrtc
看你的mysql当前默认的存储引擎:
mysql> show variables like '%storage_engine%';
你要看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎):
mysql> show create table 表名;
ios 符号隐藏
参考
Minimizing Your Exported Symbols
Dynamic Library Programming Topics
如果单独加了控制,忽略编译整体的控制,以单独的标记为主
开发动态库的时候,即使给编译器添加了 -fvisibility=hidden , 里面使用的静态库的符号也被导出了, 希望隐藏使用的静态库的符号。
指定需要导出的符号文件 -exported_symbols_list , 其他的符号都会变成内部符号。
也可以指定需要隐藏的符号,放入文件中,传递给 链接器 -unexported_symbols_list
如何把静态库里的函数强制链接入可执行程序的符号表
好办,只需要加上--whole-archive链接选项。但是在Windows平台,微软的编译器没有这样的选项,一个最接近的选项是/OPT:NOREF。
A动态库使用了B静态库,而B静态库依赖于C动态库。 当编译A动态库时,报error LNK2019: 无法解析的外部符号
你好,请详细说明你的问题!
在你提供的信息中,我只能猜测是你在gcc是你的静态库B的位置放在了A的前面,所以导致的问题。
例如:
A依赖于B的函数f
gcc test.c B A C -o test
则,由于你的A使用了B的f,gcc在链接时,发现test.c没有用到B库的f,所以不会将f链接到test,而C已经没有机会链接到B的f(因为gcc按照顺序链接输入文件)。
结果导致A所需要的f找不到,就包无法解析外部符号错误了。
VS2008,C++创建一个动态库并且在其中加载静态库,但是链接通不过,error LNK2019: 无法解析的外部符号?
把项目属性改为动态链接,加载文件放在输出目录
webrtc 怎么编译so文件
XCode项目中添加静态库的方法:1、右击target,选择add -> new target 2、在弹出的 NewTarget 界面中选择Cocoa Touch -> Static Library ,为新 library 取个名字。将源文件添加到这个库。可以直接拖动现存源文件,也可以右击 -> add 。
如何添加预编译静态库 libwebrtc
XCode项目中添加静态库的方法:1、右击target,选择add -> new target 2、在弹出的 NewTarget 界面中选择Cocoa Touch -> Static Library ,为新 library 取个名字。将源文件添加到这个库。可以直接拖动现存源文件,也可以右击 -> add 。