【GamingAnywhere源码分析之知识补充一】静态链接库与动态链接库

本文介绍了在云游戏平台GamingAnywhere(GA)源码分析过程中的知识补充,主要探讨了静态链接库与动态链接库的概念、创建与使用方法。作者通过创建和使用静态库StaticLib、动态库DllLib的实例,阐述了两者在项目引用、编译配置及调试方面的差异。文章最后提到,GA在云游戏场景下动态链接库的使用,以及未来可能面临的用户权限控制挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        云游戏GamingAnyWhere的源码阅读已经有段时间了,由于它是第一款开源的云游戏产品,因此无论是在不通种类游戏的兼容性上,还是实际投入生产(比如:多个用户连接同一台服务器上的游戏,接收到的画面和操作如何互不影响),都有很大的不足,可以说当前版本的GA还仅仅是一个样例式的应用,相比投入生产环境还面临很大的提升空间。

        这段时间完成的工作:

                1> 为了提升性能,利用Nvidia SDK进行源码改造;完成程度:可以支持GA官网提供的支持D9方式启动的游戏通过 Nvidia SDK进行捕捉,客户端可以连接游戏。

         正在进行的工作:

                1> 以《极品飞车》为例生成支持x64游戏以及采用DirectX11方式启动方式的代码改造。

                2> GA服务端构建守护进程,同时客户端配合修改以完成一个客户端连接过来,直接启动游戏、建立连接、并进行数据传送。(注:当前的思路是这样,不排除中途修改)

         尚未开展的工作:

                1> 由使用游戏拓展到使用任何应用软件,以前的实现方式是走RDP,经过Windows系统,这样的实现方式有一个极大的便利,就是用户会话以及权限的控制;而通过GA改造后就完全脱离了系统级别的约束,通过捕捉服务器端应用程序的画面、经过压缩、传递给客户端,同样捕捉客户端的操作指定作用于服务器端完成整个控制;因此预计这个工作是GA改造中最为困难的工作,如何对用户进行身份识别以及权限控制?当前我们只知道,rtsp协议中对每一个连接都会有一个session,我们的想法是将这个session和系统的session进行映射以完成权限的控制。(当然只是猜想,不知道是否可行。)

         上面啰嗦的就是这段时间以来在GA上进行的工作,由于我对C++了解的相对比较少,因此在源码的阅读过程中感觉很吃力,其中涉及到了很多的第三方开源库,少不了和dll打交道,包括在编译之初,因此想逐渐的积累对这方面知识的掌握,这篇文章不涉及GA的原理以及代码改造,只是对我自己欠缺的地方补充记录,当然之所以还没有写关于GA深层的东西,是因为现在我对它还没有宏观的把握,很多地方还没有吃透,因此关于GA的文章会在我工作推进的过程中逐渐补充的,下面就来看看静态链接库与动态链接库相关的内容吧。

         "库",顾名思义可以理解为是存放第三方函数的地方,静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则lib中的指令都被直接包含在最终生成的exe文件中了,该文件比较大,但是可以独立运行在各种平台上;若使用动态链接库,即dll,则该dll不必被包含在最终的exe文件中,因此该exe文件相对较小,exe文件执行时可以动态地引用与卸载相关的dll文件,但是该exe必须和dll打包发送,不然在exe运行时会提示缺少相应的dll文件。静态链接库和动态链接库的另一个区别在于静态链接库中不能再包含其它的动态链接库或静态链接库,而在动态链接库中还可以再包含其它的动态或静态链接库。

         下面就静态链接库与动态链接库的创建与使用给出详细的示例,我们将新建四个项目:

         1> StaticLib 用于创建静态链接库 

         2> StaticLibTest 用于使用静态链接库

         3> DllLib 用于创建动态链接库

         4> UseDllLib 用于使用动态链接库

一、创建静态链接库

        说明:如果使用静态链接库必须在项目中引用静态链接库的 .h 和 .lib 文件,因此我们创建静态链接库的最终目的就是编译出 .h 和 .lib 文件供我们使用就可以了。

        新建win32的项目,选择静态库,完成:

   

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值