如何用CMake生成Google FlatBuffers的Windows共享库(DLL)
解决FlatBuffers在Windows上构建DLL的问题
我之前也碰到过类似的困扰,FlatBuffers的CMake配置确实有几个需要留意的细节,以下是一步步的实操解决方案:
1. 先确保用的是最新版FlatBuffers
旧版本的FlatBuffers对BUILD_SHARED_LIBS的支持可能不够完善,建议先拉取最新源码或者下载官方最新的release包,避免版本兼容性导致的问题。
2. 用正确的CMake命令配置
除了BUILD_SHARED_LIBS=ON,还需要配合FlatBuffers专属的FLATBUFFERS_BUILD_SHAREDLIB选项,这两个一起开才能更稳妥地触发动态库构建。完整命令如下:
cmake .. -G "Visual Studio 16 2019" -A x64 -DBUILD_SHARED_LIBS=ON -DFLATBUFFERS_BUILD_SHAREDLIB=ON
额外提一句:加上
-A x64明确指定架构,能避免默认32位配置可能带来的潜在问题。
3. 检查项目配置并构建
- 执行完CMake命令后,打开生成的
FlatBuffers.sln解决方案; - 在解决方案资源管理器里找到
flatbuffers项目,右键查看属性:- 确认配置类型是「动态库(.dll)」;
- 确认「C/C++ → 预处理器」中已经定义了
FLATBUFFERS_SHARED宏(这个是FlatBuffers控制符号导出的关键);
- 选好Debug/Release配置后,右键生成
flatbuffers项目,这时就能在输出目录看到flatbuffers.dll和对应的导入库flatbuffers.lib了。
4. 符号导出的补充处理
如果还是遇到符号导出相关问题,除了CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON,可以在CMake命令里再加上:
-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON -DFLATBUFFERS_EXPORT_SYMBOLS=ON
不过最新版FlatBuffers在开启前面两个核心选项后,一般会自动处理符号导出,这个步骤大多时候是备用方案。
5. 清理缓存重新构建
有时候之前的构建缓存会干扰结果,建议直接删掉整个build目录,重新创建空的build文件夹后再执行CMake命令,彻底避免旧配置残留的影响。
按照这些步骤操作,应该就能顺利生成FlatBuffers的DLL文件了。
内容的提问来源于stack exchange,提问作者ontherocks




