太阳神三国杀学习第一步--编译并运行(qt5.7.0+vs2015)

起因:

    很早就想寻找一个开源的c++项目进行学习,也在很早就发现了太阳神三国杀这个项目,但是之前在github中下载后总是草草编译一直没有编译成功过,最近又重燃斗志决定深入研究一下。

分析应该能够学习到的点:

  1. 与lua配合使用,之前就听说过lua一直没有使用过,正好可以学习下;
  2. 看到项目中用到swig,这也是为了和lua配合,从中可以学习到如何通过lua将c++的接口暴露给脚本语言;
  3. 看到程序可以主从的接入,这方面也可以学习;
  4. 关于如何加入机器人,之前一直没有深入理解,这也是一个很好的切入点。
        总之太阳神三国杀是一个很全面的软件,甚至做成了一个框架,可以通过lua进行扩展,很值得学习。

开始编译:

    之前编了好多次一直没有编译成功,无法成功的编译可以说一切都是免谈。

  1. 下载源码:https://github.com/Mogara/QSanguosha-v2;
    以上是三国杀(后面均简称太阳神三国杀为三国杀)最新的github地址,看到最近更新也为3个月前,所以要学习还是要乘早,万一以后不再更新了也不是很好。另外直接通过git进行clone很慢而且不能断点续传(网上说可以通过git init和git fetch达到断点的效果),所以直接通过迅雷下载的zip文件;
  2. 下载swig:http://www.swig.org/ ;去官网下载自然没什么好说的;
  3. 生成sanguosha_wrap.cxx文件,之前由于没有走这个步骤,导致直接编译一直失败;
    参照swig.sh写了个swig.bat脚本,运行即可:
cd /d %~dp0
@set swigExe=D:\project\swigwin-3.0.10\swig.exe
%swigExe% -c++ -lua -O sanguosha.i
  1. 开始编译,报错ing…
    报错1.识别不出declarative模块: 查看pro文件发现这项配置!winrt: QT += declarative;这是由于太阳神三国杀当时使用的是qt 4.7,而我现在编译的环境是qt 5.7.0。而且qt在qt4-qt5时将declarative模块去除了,改用 qml quick进行了替换(这部分文档可以在qt帮助的Porting QML Applications to Qt 5 中看淡到)。于是替换declarative为qml quick。
    接着编译…
    报错2.#include查找不到QDeclarativeEngine、QDeclarativeContext、QDeclarativeComponent文件,这也与qt4升级到qt5有关,如果采用qt4编译应该不会有这些问题,按照qt帮助改即可:
    太阳神三国杀学习第一步--编译并运行(qt5.7.0+vs2015)_第1张图片
    下面我写了个#define进行替换(#include里面没法替换,如果可以替换我愿意整体让一个宏来解决)
    接着编译…
    报错3.无法解析的外部符号 __imp___vsnprintf ,查看度娘后说是由于没有链接库legacy_stdio_definitions.lib,参考外部链接http://blog.csdn.net/hebbely/article/details/53780562;
    后面搜索vs目录下真有这个库,链接进即ok。(注1,我是使用qt+vs2015进行编译,可能mingw编译并不会有这个问题;2,我在qtcreater的pro文件中LIBS以绝对路径添加该库一直没有成功过,也可能是我pro里的语法使用有问题,后面直接在main.cpp中添加#pragma comment(lib,”legacy_stdio_definitions.lib”)搞定;3,我在qtcreater中release不用添加这个库一样可以ok,还有但最后在从qtcreater中启动一直无法启动且无任何可用信息直接crash,这个应该是dll位置啥的不正确,在vs中可以正常debug)

    搞定

    经过多番波折终于搞定了,其实想想也没有什么难的只是之前一直没有去花时间研究,一发现编译错误就放弃了,但现在编译成功了也不晚,下面就要开始我对其的学习之旅了~~

你可能感兴趣的:(Qt开源学习--太阳神三国杀,c语言,lua)