踩坑記錄:因版本不匹配導致 Boost 1.85 編譯失敗的完整解決過程

踩坑記錄:因版本不匹配導致 Boost 1.85 編譯失敗的完整解決過程

轉載請注明出處,歡迎評論區交流。

背景

最近在 Windows 11 + VS2022 環境下嘗試用 b2 編譯 Boost 1.85.0,結果一路踩坑,最后發現罪魁禍首是 Boost.Build 自帶的 msvc.jam 對 VS 17.10(14.4)識別不完整
官方 issue #931 里也提到了同樣的報錯,但沒有一個完整的解決流程,于是把今天的填坑過程記錄下來,希望能幫到后來者。


現象

執行:

bootstrap.bat
b2 toolset=msvc-14.4 variant=release

很快報錯退出,關鍵信息:

...patience...
...found 1891 targets...
...updating 4 targets...
msvc.write-setup-script
bin.v2\tools\build\src\engine\msvc-setup.bat
The system cannot find the path specified.

隨后 b2 直接退出,返回碼 1。用 --debug-configuration 再跑一次,發現 msvc.jam 里這一段:

if [ MATCH "(14.4)" : $(version) ]
{parent = [ path.native [ path.join $(parent) "..\..\..\..\..\Auxiliary\Build" ] ] ;
}

并沒有被執行,也就是說 Boost.Build 根本沒把 14.4 當成合法版本,于是 vcvarsall.bat 的路徑就拼錯,導致找不到編譯環境。


根因分析

  1. Boost.Build 1.85 的 msvc.jam 只識別到 14.3
    用文本編輯器打開
    boost_1_85_0\tools\build\src\tools\msvc.jam
    搜索 14.3 能看到對應的 if 分支,但 沒有 14.4

  2. **VS2022 17.10 的 _MSC_VER = 1940**, 對應 14.4` 工具集,Boost.Build 不認識,于是 fallback 失敗。


解決方案(任選其一)

? 方案 A:官方補丁文件直接替換(推薦)

  1. 下載官方提供的 msvc.zip

  2. 關閉所有占用 boost_1_85_0\tools\build\src\tools\msvc.jam 的編輯器/IDE。

  3. 把壓縮包里的 msvc.jam 覆蓋到
    boost_1_85_0\tools\build\src\tools\msvc.jam

  4. 重新執行:

    b2 toolset=msvc-14.4 -j8
    
  5. 編譯順利通過。

? 方案 B:手動打補丁(不想覆蓋文件時)

msvc.jamelse if [ MATCH "(14.3)" : $(version) ] 后面追加:

else if [ MATCH "(14.4)" : $(version) ]
{if $(.debug-configuration){ECHO "notice: [generate-setup-cmd] $(version) is 14.4" ;}parent = [ path.native [ path.join $(parent) "..\..\..\..\..\Auxiliary\Build" ] ] ;
}

保存后重新 b2 即可。
在這里插入圖片描述


驗證

>b2 --version
B2 4.10.1 (OS=NT, jobs=8)>b2 toolset=msvc-14.4 address-model=64 architecture=x86 variant=release --with-system --with-filesystem
...found 2037 targets...
...updating 18 targets...
...updated 18 targets...

輸出無報錯,生成的 .lib.dll 也正常。


小結

  • Boost 1.85 尚未完全適配 VS2022 17.10,但社區補丁已經可用。
  • 如果后續 VS 再升級,大概率還會遇到同樣問題,直接照葫蘆畫瓢在 msvc.jam 里加一行即可。
  • 建議把補丁文件存一份到私有倉庫,CI/CD 里自動打補丁,避免每次手動操作。

參考資料

  • GitHub issue #931: (需要翻墻)
    Why can’t I build boost in my computer?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/90381.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/90381.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/90381.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

InfluxDB Line Protocol 協議深度剖析(二)

四、Line Protocol 寫入操作與實踐(一)HTTP API 寫入使用 HTTP API 是通過 Line Protocol 寫入數據到 InfluxDB 的常用方式。InfluxDB 1.x:請求方式為 POST,URL 格式為 “http://host:port/write?dbdatabase_name”。其中&#x…

負載均衡:提升業務性能的關鍵技術

一.負載均衡(3.6 )1.1.什么是負載均衡:負載均衡:Load Balance,簡稱LB,是一種服務或基于硬件設備等實現的高可用反向代理技術,負載均 衡將特定的業務(web服務、網絡流量等)分擔給指定的一個或多個…

【STM32項目】智能家居(版本1)

????大家好,這里是5132單片機畢設設計項目分享,今天給大家分享的是基于《基于STM32的智能家居設計》。 目錄 1、系統功能 2.1、硬件清單 2.2、功能介紹 2.3、控制模式 2、演示視頻和實物 3、系統設計框圖 4、軟件設計流程圖 5、原理圖 6、主…

OpenSCA開源社區每日安全漏洞及投毒情報資訊—2025年7月24日

2025年7月24日安全風險情報資訊在野漏洞風險(CVE未收錄):1公開漏洞精選:2組件投毒情報:2在野漏洞風險(CVE未收錄)1.1 gemini-cli項目潛在命令注入漏洞項目詳情項目描述:gemini-cli是…

飛算 JavaAI 深度實戰:從老項目重構到全棧開發的降本增效密碼

飛算 JavaAI 深度實戰:從老項目重構到全棧開發的降本增效密碼引言正文一、智能引導模塊:老項目重構的 “手術刀” 級解決方案1.1 本地化智能分析:IDEA 插件實操演示1.1.1 📌 IDEA 插件安裝步驟1.1.1.1 首先打開idea工具&#xff0…

分布式推客系統開發全解:微服務拆分、傭金結算與風控設計

一、推客系統概述與市場背景推客系統(也稱為分銷系統或社交電商系統)已成為現代電商平臺和內容平臺的重要增長引擎。根據最新統計數據,2023年社交電商市場規模已突破3萬億元,占整體電商市場份額的25%以上。推客系統的核心價值在于…

Linux tcpdump 抓取udp 報文

一、tcpdump 支持命令選項tcpdump -i # 指定監聽網絡接口tcpdump -w # 將捕獲到的信息保存到文件中,且不分析和打印在屏幕tcpdump -r # 從文件中讀取數據tcpdump -n # 不把 ip 轉化成域名tcpdump -t # 在每行的輸出中不顯示時間tcpdump -v # 產生詳細的輸出tc…

Oracle數據塊8KB、OS默認認塊管理4KB,是否需調整大小為一致?

上班路上,腦中忽然閃現一個問題:Oracle數據庫塊大小(8KB)、操作系統文件系統塊大小(4KB),為了減少IOPS,需不需要調整為一致?在數據塊保持一致的情況下,針對頻…

卡爾曼濾波器噪聲方差設置對性能影響的仿真研究

卡爾曼濾波器噪聲方差設置對性能影響的仿真研究 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家,覺得好請收藏。點擊跳轉到網站。 1. 引言 卡爾曼濾波器是一種廣泛應用于信號處理、控制系統、導航系統等領域的遞歸估計算法。它通過對系…

“多線程修路:當count++變成災難現場”

1.現象 當我們操作一個線程池的時候,可能需要去計數,也就是統計count,那我們這里有一個疑問,會不會產生線程安全問題? 毫無疑問絕對會有線程安全問題。在線程池環境中,多個線程并發訪問和修改一個共享的 co…

GaussDB null的用法

1 null的定義null 空值代表丟失的未知數據。 默認情況下,表列可以保存 null 值。 本章解釋 is null 和 is not null 操作符。2 null值的贅述如果表中的列是可選的,那么我們可以插入一個新記錄或更新一個現有記錄,而無 需向列添加一個值。這意…

智慧農業新圖景:物聯網如何精準守護作物生長?

在傳統農業生產模式下,農民往往憑借經驗判斷作物生長需求,灌溉、施肥缺乏精準性,導致水資源浪費、土壤板結、作物產量與品質難以提升等問題。加之氣候變化無常,極端天氣頻發,給農業生產帶來諸多不確定性,傳…

[ComfyUI] -入門2- 小白零基礎搭建ComfyUI圖像生成環境教程

AI圖像生成已經成為AIGC(人工智能生成內容)領域的重要組成部分,而ComfyUI作為一款可視化的Stable Diffusion工作流工具,以其模塊化、高度自由化的特點吸引了越來越多創作者的關注。本文將手把手教你如何在Windows系統下,從零搭建屬于自己的ComfyUI圖像生成環境。 一、Comf…

java設計模式 -【單例模式】

單例模式的定義 單例模式(Singleton Pattern)是一種創建型設計模式,確保一個類只有一個實例,并提供一個全局訪問點。常用于需要控制資源或共享狀態的場景,例如數據庫連接、日志記錄器等 單例模式的實現方式 餓漢式&…

Flink 自定義類加載器和子優先類加載策略

子類優先加載Flink 默認采用了子優先(Child-First)的類加載策略來加載用戶代碼,以解決潛在的依賴沖突問題。我們可以通過源碼來證明這一點。ChildFirstClassLoader 的實現Flink 中負責實現“子優先”加載邏輯的核心類是 ChildFirstClassLoade…

Nginx 安全加固:如何阻止 IP 直接訪問,只允許域名訪問

在部署網站或 Web 應用時,我們通常會通過域名來訪問服務。然而,有時用戶可能會嘗試直接使用服務器的 IP 地址來訪問,這不僅可能繞過我們的域名特定配置(如 SSL 證書、重定向規則等),還可能導致不必要的安全風險或管理混亂。本文將介紹如何配置 Nginx,使其在通過 IP 地址…

服務端處于 TIME_WAIT 狀態的 TCP 連接,收到相同四元組的 SYN 后會發生什么?詳解

文章目錄一、先判斷 SYN 是否合法1、開啟「時間戳」機制1.1、合法 SYN1.2、非法 SYN2、關閉「時間戳」機制1.1、合法 SYN1.2、非法 SYN二、收到合法 SYN三、收到非法 SYN一、先判斷 SYN 是否合法 1、開啟「時間戳」機制 1.1、合法 SYN 客戶端的 SYN「序列號」比服務端「期望…

數字化轉型:一文讀懂從單系統到智能架構(業務、應用、數據、技術架構)的跨越

在數字化浪潮席卷全球的今天,企業正經歷從 “單系統孤島” 到 “智能架構協同” 的范式革命。智能架構以業務敏捷化、應用服務化、數據價值化、技術云原生化為核心特征,通過四個維度的架構升級,破解傳統 IT 系統的效率瓶頸,支撐企…

AUTOSAR進階圖解==>AUTOSAR_SRS_Transformer

AUTOSAR Transformer 詳解 基于AUTOSAR 4.4.0標準的Transformer模塊分析與說明目錄 1. Transformer概述 1.1 Transformer的作用1.2 Transformer的基本特性 2. Transformer架構 2.1 整體架構2.2 類層次結構 3. Transformer類型 3.1 SOME/IP Transformer3.2 COM Based Transform…

【算法專題訓練】05、最大單詞長度乘積

1、題目信息 https://leetcode.cn/problems/aseY1I/description/ 給定一個字符串數組 words,請計算當兩個字符串 words[i] 和 words[j] 不包含相同字符時,它們長度的乘積的最大值。假設字符串中只包含英語的小寫字母。如果沒有不包含相同字符的一對字符串…