Are you sure you want to delete this task? Once this task is deleted, it cannot be recovered.
|
|
2 years ago | |
|---|---|---|
| .. | ||
| API | 2 years ago | |
| grpc | 2 years ago | |
| proto | 2 years ago | |
| spdlog | 2 years ago | |
| tclap | 2 years ago | |
| .gitattributes | 2 years ago | |
| .gitignore | 2 years ago | |
| CAPI.sln | 2 years ago | |
| CMakeLists.txt | 2 years ago | |
| Develop Progress.md | 2 years ago | |
| README.md | 2 years ago | |
C++ 通信组件与选手接口
/std:c++17; /std:c17),并且应同时在 x64 平台的 Debug 与 Release 模式下正确编译并运行-std=c17;C++ 编译工具使用 g++,语言标准为 -std=c++17。优化选项为 -O2,生成 64 位程序 -m64,并编写相应的 Makefile::operator new、::operator new[];使用 std::make_unique、std::make_shared、std::vector 等代替;constexpr 代替;[[nodiscard]]、[[fallthrough]]、[[noreturn]] 等;.h、.hpp)的编写规范
#pragma once 以及保护宏,而 cpp 中不要写这两个东西using namespace std!!!也不允许在任何自定义的名字空间中 using namespace std!!!cpp 文件各司其职,代码写在改写的位置起初 C++ 开发时使用 Linux 开发,但在选手包发布 Windows SDK 时遇到诸多问题。Windows 平台的 C++ 接口使用 Visual Studio 进行环境配置。期间遇到诸多问题,配置环境方法如下:
Debug 和 Release(即在 CMake config 参数中分别指定 Debug 和 Release 各生成一份 Visual Studio 工程)的 x64 平台的依赖库。注意使用静态编译,根据此原则不生成 gRPC 和 Protocol Buffers 本身的 DLL,即只有 .lib 无 .dll(但是可能会有一些其依赖的第三方库的 .dll),将 Debug 和 Release 生成的 .lib 和 .dll(如果有的话)均分别保存x64-windows-static 的 gRPC,即执行 vcpkg install grpc:x64-windows-static,以生成静态库(注意 vcpkg 需要调用本地的 Visual Studio 进行现场编译和生成,所以所耗时间可能较长,请耐心等待;并且此步骤由于需要从 GitHub 上现场拉源代码,因此可能需要科学上网)。然后进入 vcpkg 的安装目录,将里面安装的 gRPC 的所有 Debug 和 Release 的 .lib 和 .dll(如果有的话)分别保存一份.vcxproj 和 .vcxproj.filters:.vcxproj 用于配置项目的编译与链接,.vcxproj.filters 用于配置 Visual Studio 的筛选器的结构(即解决方案资源管理器的结构)。参考 THUAI6 的 API.vcxproj 和 API.vcxproj.filters。基本上可以直接无脑复制过来,不用做什么修改。如果非要在 Visual Studio 里手动配置,需要配置以下几项(以下的链接均以 x64 Release 为例,Debug 的相应配置在相应链接的上面一些的位置):.h 和 .cpp 文件加入到项目中(包括 protoc 生成的那些 .pb.h 和 .pb.cc,但这些最好参照 API.vcxproj.filters 的组织结构各单独开一个子筛选器放进去以使得 Visual Studio 打开时更美观)/std:c++17、C 语言标准为 /std:c17/source-charset:utf-8 选项,以保证编译时编译器使用 UTF-8 编码进行源文件读取(注意这个与 Visual Studio 的高级保存选项不同,高级保存选项决定了文件的保存时的保存编码,而非编译器编译时读取使用的编码)\ 而非 /,负责可能会出现一些玄学问题/MTd)”,Release 下设置其为“多线程(/MT)”.lib 分别放在项目中的单独的文件夹里(THUAI6 使用的是 CAPI\cpp\lib\debug 和 CAPI\cpp\lib\release),并使用 .gitignore 忽略掉.lib 文件的相应路径dir /b 将其自动列举并复制。还需要注意需要手动指定链接一些 Windows 自带的 lib,例如 Ws2_32.lib、Crypt32.lib、Iphlpapi.lib 等。如果生成过程中不通过,表示找不到一些函数,则在 Google 中搜索该函数,如果发现是 Windows 系统的 API 函数则会搜到微软官方文档 的对应链接的页面,则在页面最下方会表明它所在的 .lib(例如 CreateProcessA 的页面),加进去即可C/C++ 的“所有选项”中搜索多处理器编译,并开启(/MP).dll 文件(如果有的话)放在与 .exe 相同的目录下。该目录为与 .sln 相同目录的(不是与 .vcxproj 相同目录的)x64\Debug 和 x64\ReleaseMirror of https://github.com/eesast/THUAI6.git
C++ C C# Python other