紧接着上一篇文章https://blog.csdn.net/qq_37387199/article/details/137890740
获取丢失的代码
拿到丢失的源代码需要去 Google 的 protobuf GitHub 仓库,地址在 https://github.com/protocolbuffers/protobuf
可以下载压缩包,也可以使用 Git 克隆。前者会丢失一部分第三方库,而这些是编译 protoc 文件所不可或缺的(当然如果你不编译就不需要这些)
我这里使用 Git 克隆,在本地目录下执行:
git clone https://github.com/protocolbuffers/protobuf.git
进入 protobuf 目录,我们需要下载未自动下载的第三方库:
git submodule update --init --recursive
编译 protoc 文件(可以跳过,也许)
上一篇文章,我们使用了 release 中现成的 protoc 生成 pb 的头文件和源文件,其实我们也可以直接通过源代码编译生成这个。
可以参考这篇文章https://blog.csdn.net/wzw1609119742/article/details/119712422,写得很不错。我是用 Clion 自动编译的。
构建指令:
"C:\Program Files\JetBrains\CLion 2024.1\bin\cmake\win\x64\bin\cmake.exe" -DCMAKE_BUILD_TYPE=Debug "-DCMAKE_MAKE_PROGRAM=C:/Program Files/JetBrains/CLion 2024.1/bin/ninja/win/x64/ninja.exe" -G Ninja -S D:\Codes\3rd\protobuf -B D:\Codes\3rd\protobuf\cmake-build-debug
编译指令:
"C:\Program Files\JetBrains\CLion 2024.1\bin\cmake\win\x64\bin\cmake.exe" --build D:\Codes\3rd\protobuf\cmake-build-debug --target all -j 10
测试pb文件
我编写的 test.cpp 如下:
int main()
{Person p;std::string name = "ti";p.set_allocated_name(&name);p.set_age(1);p.set_sex(1);std::string output;p.SerializeToString(&output);std::cout << output << std::endl;
}
文件需要放在 protobuf 工程 src 目录下,和生成的 pb 头文件和源文件放在一起,才能保证正常 include 。