zoukankan      html  css  js  c++  java
  • 如何使用IDE为Qt Creator编译器为mingw的方式编译RakNet。。。

        RakNet是什么,这一点不在本文中说明,或许我会另开随笔说明,你也可以搜索一下它。以下的说明将假定你有一定的编程基础,不针对初学者讲解。

        另:该说明只针对 Windows 32位平台,其它平台没有验证过下列步骤的准确性。

        RakNet当前版本提供的主要是 VS 的项目文件以及还有 XCODE 的,但我主要想在mingw版本的Qt中使用它,因此有了此文的诞生。很幸运的一点是,它至少提供了CMakeLists.txt 。

        为什么使用了Qt Creator,因为它可以直接使用CMakeLists.txt做为项目文件而创建一个可编译的项目版本。你也可以直接使用CMake来处理CMakeLists.txt,但是我懒所以我选择了 Creator 。

        这里有一个要点,你需要一定版本的Creator才能做到上述行为,且需要在 Creator 的编译工具链中正确添加了 mingw 编译器路径以及设置了 CMake 路径,CMake需要2.6以上的版本。关于这点,同样不在本文中说明。

        RakNet解压准备Ok,Creator、mingw、CMake准备OK,下面进入步骤:

    1. 打开 RakNet 目录下的 CMakeLists.txt 文件,找到第44行:
      set( RAKNET_INCLUDE_DIRS ${RAKNETHEADERFILES} ${RAKNET_INCLUDE_ONLY_DIR} PARENT_SCOPE )

      更改为:

      set( RAKNET_INCLUDE_DIRS ${RAKNETHEADERFILES} ${RAKNET_INCLUDE_ONLY_DIR} )
    2. 打开 RakNet 目录下的 LibDLL 目录下的 CMakeLists.txt 文件,它是生成动态链接库的,找到第13行:
      SET( CMAKE_CXX_FLAGS "/D WIN32 /D _RAKNET_DLL /D _CRT_NONSTDC_NO_DEPRECATE /D _CRT_SECURE_NO_DEPRECATE /GS- /GR- ")

      更改为:

      SET( CMAKE_CXX_FLAGS "-D WIN32 -D _RAKNET_DLL -D _CRT_NONSTDC_NO_DEPRECATE -D _CRT_SECURE_NO_DEPRECATE ")
    3. 打开 RakNet 目录下的 LibLibStatic 目录下的 CMakeLists.txt 文件,它是生成静态链接库的,找到第12行:
      SET( CMAKE_CXX_FLAGS "/D WIN32 /D _RAKNET_LIB /D _CRT_NONSTDC_NO_DEPRECATE /D _CRT_SECURE_NO_DEPRECATE /GS- /GR- ")

      更改为:

      SET( CMAKE_CXX_FLAGS "-D WIN32 -D _RAKNET_LIB -D _CRT_NONSTDC_NO_DEPRECATE -D _CRT_SECURE_NO_DEPRECATE ")

      找到第22、23行:

      ELSE()
                  set_target_properties(RakNetLibStatic PROPERTIES STATIC_LIBRARY_FLAGS "/NODEFAULTLIB:"LIBCD.lib LIBCMTD.lib MSVCRT.lib"" )

      删除这两行

    4. 打开 RakNet 目录下的 Source 目录下的 UDPForwarder.cpp ,找到第244行:
      && errno!=EWOULDBLOCK

      更改为:

      && errno!=WSAEWOULDBLOCK
    5. 打开 RakNet 目录下的 Source 目录下的 DR_SHA1.h ,找到第172行:
      #define TCHAR char

      更改为:

      #include <tchar.h>

        Ok ,点下“构建项目”的按钮,开始祈祷吧!

        经过一段不算长的时间等待,除了少许字符类型警告外,RakNet 已经成功编译出了mingw下的静态库:“libRakNetLibStatic.a”,动态库:“libRakNetDLL.dll、libRakNetDLL.dll.a” 。

        我使用以下代码进行简单测试:

    #include "MessageIdentifiers.h"
    #include "RakPeerInterface.h"
    #include "RakNetStatistics.h"
    #include "RakNetDefines.h"
    #include "RakNetTypes.h"
    
    int main(int argc, char *argv[])
    {
        RakNet::RakPeerInterface *server = RakNet::RakPeerInterface::GetInstance();
        RakNet::RakPeerInterface::DestroyInstance(server);
        return 0;
    }

        结果静态库编译报错,但动态库是能正常使用的。期望有闲又有兴趣的童鞋能试一试,尝试解决下静态库的问题。

        The end.

  • 相关阅读:
    如何配置QuickFIX/N
    QuickFIX/N 动态存储配置信息
    Java深入
    【转】VS项目属性的一些配置项的总结
    vs2013中项目依赖项的作用
    Caffe初试(一)win7_64bit+VS2013+Opencv2.4.10+CUDA6.5配置Caffe环境
    【转】字符集和字符编码(Charset & Encoding)
    【转】编程思想之正则表达式
    【转】编程思想之异常处理
    【转】深入Windows内核——C++中的消息机制
  • 原文地址:https://www.cnblogs.com/rozen/p/3929531.html
Copyright © 2011-2022 走看看