windows下使用visualstudio编译peerconnection_client
第二章我们把webrtc的头文件和库文件打包好了。那么怎么验证它是对的呢,很简单,我们用它来编译一个客户端程序就知道了。
我一勺三花淡奶(不是)。直接使用官方的examples中的peerconnection_client来测试吧。
官方用的是gn/ninja/clang。我们要用vs/msbuild/clang。
(当然,都用了msvc的头文件、库文件和WindowsSDK的头文件库文件)
首先我们的vs要安装clang,用msvc编译器不得行了。
然后创建项目
项目创建好后我们把代码和打包好的头文件库文件放进来,并加入到项目中。
然后为项目配置一些参数。
这里我稍微解释一下。webrtc官方使用clang编译,并且重写了c++(可能初学者有点奇怪,tmd c++还能重写?没办法,google就是这么刚),这两样我们绕不开,所以对预处理宏和库文件目录有一些特殊处理。
然后我们把obj和o(.o是汇编生成的)打包成一个webrtc.lib了(webrtc自己打包的不全,那个用不了,它自己都没用),所以就不必如同ninja项目中一样引用obj了。
不过我这里还需要引用msvcprt.lib(大家可以不引用试试,哈哈),也是没有料到,因为ninja项目中没有用,不知道是不是有坑。
附上peerconnection_client.ninja图片
(其实万变不离其宗,不管是从autoconf/cmake到meson/gn,从gcc到clang,从mingw到msvc,它总是从一个配置文件生成一个脚本文件,最终调用编译器和链接器)
(即使如同webrtc这样大型的项目,我们仍可以从最终产物lib/exe/dll和编译器clang-cl/lld-link进行反推,找到所需要的内容)
为了方便大家,我把项目发上来了。可以直接下载后编译
最后修改时间 2022-10-02 17:15:04
后来发现理解错了,不用引入msvcprt.lib,而是使用命令行引入libcpmt.lib
解释一下:msvc[m/p]rt.lib是动态链接(最终产物需要依赖vcruntime**.dll),libc[p]mt.lib是静态库,最终不需要依赖dll。
(如上图,在编译时也有/MT /MD两个不同参数)
简单来说,如果你希望最终产出一个exe,放到用户电脑上就能用,就用/MT,链接libc[p]mt.lib。当然,/MD也不是一无是处,在大型项目中,各个部门分别负责一个模块,且最终产出的项目文件多,占空间大时,也就不在乎多几个dll了,这时候使用动态链接反而更好。
最后修改时间 2022-10-02 17:51:48
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具