You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用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

火山引擎 最新活动