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

如何编译适配/MT的Boost二进制文件以兼容CEF cefclient项目?

解决CEF cefclient与Boost编译选项不兼容的LNK1104错误

我之前也碰到过类似的CEF和Boost因CRT编译选项不匹配导致的链接问题,结合你的环境(Win10 x64、VS2017、CEF x32),给你一步步说明如何编译适配/MT(静态多线程CRT)的Boost二进制文件:

步骤1:准备Boost环境

先确保你已经下载了对应版本的Boost(比如你提到的1.66版本),解压到一个路径清晰的目录,比如D:\boost_1_66_0

步骤2:打开VS2017的x86命令提示符

因为你的CEF是32位的,必须使用32位的编译环境。打开x86 Native Tools Command Prompt for VS 2017——这个可以在开始菜单的「Visual Studio 2017」文件夹里找到,不要选错成x64版本的。

步骤3:初始化Boost编译工具

在命令行中切换到Boost的解压目录,运行以下命令生成编译工具b2.exe

bootstrap.bat

步骤4:编译适配/MT的Boost库

Boost的编译参数需要明确指定静态CRT选项,分别编译Release和Debug版本:

编译Release版本(对应/MT)

执行这条命令:

b2 toolset=msvc-14.1 threading=multi link=static runtime-link=static address-model=32 --build-type=complete stage

编译Debug版本(对应/MTd)

执行这条命令:

b2 toolset=msvc-14.1 threading=multi link=static runtime-link=static address-model=32 variant=debug --build-type=complete stage

参数解释:

  • toolset=msvc-14.1:指定使用VS2017的编译器(VC141版本)
  • threading=multi:编译多线程版本的Boost库
  • link=static:生成静态链接的Boost库文件
  • runtime-link=static:强制使用静态CRT(即/MT/MTd选项,和cefclient的设置匹配)
  • address-model=32:生成32位库,匹配你的CEF x32环境
  • --build-type=complete:编译所有Boost组件的全版本,避免遗漏你需要的库
  • stage:将编译好的库统一输出到boost根目录\stage\lib下,方便后续项目引用

步骤5:在cefclient项目中配置Boost

打开cefclient的VS项目属性,做以下配置:

  • VC++目录 -> 包含目录:添加Boost的解压根目录(比如D:\boost_1_66_0
  • VC++目录 -> 库目录:添加Boost编译后的stage/lib路径(比如D:\boost_1_66_0\stage\lib
  • C/C++ -> 代码生成 -> 运行库:确保Release版本选「多线程(/MT)」,Debug版本选「多线程调试(/MTd)」,和Boost的编译选项完全对应

备选方案:让CEF适配Boost的/MD选项

如果你不想编译Boost,也可以尝试修改cefclient的项目设置为/MD(动态多线程CRT):

  • 打开cefclient项目属性,找到C/C++ -> 代码生成 -> 运行库,Release改为「多线程DLL(/MD)」,Debug改为「多线程调试DLL(/MDd)」
  • 这种方式不需要重新编译Boost,但要注意CEF的其他依赖是否也支持/MD选项,可能会引发其他潜在的链接问题,所以更推荐前面的Boost适配CEF的方案

内容的提问来源于stack exchange,提问作者user3424037

火山引擎 最新活动