实操基于cocos2d-x游戏项目(编译底层代码静态库)(4.0)(四)

一、编译底层代码

在这里插入图片描述

在这里插入图片描述
这个四个是静态库
在这里插入图片描述

报错1:

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppBuild.targets(1299,5): warning MSB8012: TargetPath(E:\20201125\cocos2d-x-2.1.5\XCommon\Debug.win32\dbUI.lib) does not match the Library’s OutputFile property value (E:\20201125\cocos2d-x-2.1.5\XCommon\Debug.win32\dbUI_d.lib). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Lib.OutputFile).

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppBuild.targets(1301,5): warning MSB8012: TargetName(dbUI) does not match the Library’s OutputFile property value (dbUI_d). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Lib.OutputFile).

dbAlign.obj : warning LNK4221: 此对象文件未定义任何之前未定义的公共符号,因此任何耗用此库的链接操作都不会使用此文件

dbEventSet.obj : warning LNK4221: 此对象文件未定义任何之前未定义的公共符号,因此任何耗用此库的链接操作都不会使用此文件

在这里插入图片描述
在这里插入图片描述
只成功生成了3个静态库,失败一个

在这里插入图片描述

原因1:

编译器找不到“libToolkit/DBLog.h”,这个不是C++库文件,我们需要指定查找目录路径
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解决1:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

应用,然后确定,报错消失

在这里插入图片描述
在这里插入图片描述

报错2:

e:\20201125\cocos2d-x-2.1.5\xcommon\resourcelib\classes\dbresfntloader.cpp(43): error C2039: “initWithFNTContent”: 不是“cocos2d::CCBMFontConfiguration”的成员
e:\cocos2d-x-2.1.5\cocos2dx\label_nodes\cclabelbmfont.h(108) : 参见“cocos2d::CCBMFontConfiguration”的声明
在这里插入图片描述
在这里插入图片描述
Error:class "cocos2d::CCBMFontConfiguration"没有成员“initWithFNTContent”

原因2:

查看引擎代码验证一下:
按F12
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
这个路径我已经改过了,可能没有生效,重启一下vs
在这里插入图片描述
发现还是一样的
弄着弄着,我发现不对,底层代码应该从引擎代码中拿出来,不用装在一起,给lua业务逻辑的人,他们只不过是用到exe,还有很多动态库,我们底层代码不用给他们看,封装起来。

到时把debug和release版本的动态库和exe编译好了,拷进这两个文件夹里面

在这里插入图片描述
在这里插入图片描述
把XCommon删除,压缩这个cocos2d-x-2.1.5文件夹发给lua业务逻辑的人。这样只写lua的人就只知道用给他们封装好的接口,永远都不知道C++实现细节,达到了封装后隐藏实现方法的好处。

二、正确编译底层代码

引擎代码和底层代码分开

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

编译好四个静态库

在这里插入图片描述
在这里插入图片描述

三、打开游戏工程

游戏工程目录和引擎目录分开

我之前是把自己创建的游戏工程放在引擎目录的,这样不好,因为我们后期是要把引擎目录改造完发给lua换皮业务逻辑人员用的,他们只需用的exe和一些dll动态库就好,其他都不需要看见。
如何创建可以参考我之前写的:
https://blog.csdn.net/xiaoduangg/article/details/110141570
为此我把之前的工程移出来
在这里插入图片描述
在这里插入图片描述
打开引擎目录的解决方案
在这里插入图片描述
在这里插入图片描述
把我们的游戏工程加进解决方案
在这里插入图片描述
在这里插入图片描述
可以给它重命名改一下名字,这样放到最下面
在这里插入图片描述
设置启动项,运行一下

在这里插入图片描述
生成一下
在这里插入图片描述

保持封装性

游戏工程项目不要加入加入引擎目录的解决方案

我们之前生成的游戏工程,都是拷贝引擎提供的demo工程来创建,实践工作项目肯定不会和引擎一模一样的,而且我们还要对引擎的网络协议,UI等进行二次封装,使得lua换皮人员比较容易上手,不用看那么复杂代码。

后面我再单独讲,这个X0.sln工程创建的细节,这里我先直接用
在这里插入图片描述

中间目录和输出目录

在这里插入图片描述
当我们生成的时候,一份生成在自己工程本地,一份生成去引擎工程目录,给lua换皮人员永远看到的是那份只是多了动态库和exe的引擎目录

在这里插入图片描述

四、换了底层代码路径

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
xcopy /Y “E:\20201125\BottomCode\xcommon\trunk\Debug.win32\DBLua_d.lib” “D:\BottomCode\xshared\dbLua\lib\win32”
xcopy /Y “…\Classes\dbLua*.h” “D:\BottomCode\xshared\dbLua\include\dbLua”
xcopy /Y “…\Classes\lua\tolua\tolua++.h” “D:\BottomCode\xshared\dbLua\include\tolua”

通过查看静态库生成的日志文件,发现静态库生成完成以后,都会强制拷贝一份去D盘的BottomCode

而我现在是想把路径改为E盘的BottomCode,该如何改呢

XML文件

在这里插入图片描述
你就算改了环境变量重启都没有用,在xml文件里面随便打一空行,然后保存,重新加载解决方案
在这里插入图片描述

生成的时候如果遇到这种报错

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppBuild.targets(1299,5): warning MSB8012: TargetPath(E:\20201125\BottomCode\xcommon\trunk\Debug.win32\dbResource.lib) does not match the Library’s OutputFile property value (E:\20201125\BottomCode\xcommon\trunk\Debug.win32\dbResource_d.lib). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Lib.OutputFile).
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppBuild.targets(1301,5): warning MSB8012: TargetName(dbResource) does not match the Library’s OutputFile property value (dbResource_d). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Lib.OutputFile).

解决方法

在这里插入图片描述
我是在环境变量里面配了一个ProjectDir的宏,但是写错了,我把它删了

最后都会生成到这个目录xshared

在这里插入图片描述

有d的是debug版本,没有d的是release
在这里插入图片描述

tolua+±1.0.93

tolua是一款工具,大大简化了C/C++和Lua代码的集成。基于干净的头文件(或从真正的头文件提取),tolua自动生成绑定代码供lua访问C/C++的功能。使用Lua API和标记方法设施(tag method facilities),tolua可以映射C/C++的常量,外部变量,函数,类和方法到Lua。 tolua++是tolua的一个扩展版本,一款集成C/C++和Lua代码的工具
在这里插入图片描述
我们这里把静态库lib文件拷贝进对应的目录

我们把dblua下面的所有.h头文件拷进对应目录,还有一个tolua++.h头文件,但是实现方法的cpp文件我们依然保留在我们的底层代码里面

其他三个的日志:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
所以即使把xshared目录给出去,底层代码保留,依然是安全的

五、再次打开游戏工程

多态库就一般就不是我们自己写的了,从网上下的资源,用前人写好的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
编译还是有很多问题,需要配置

六、总结

本来想一篇博客总结完的,但是发现似乎不行,那就得很长的博客了,感觉还是要多写几篇才行
后面我会重点分析每个exe或者静态库或者动态库

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaoduangg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值