IronPdf.LinuxARM:無法在靜態 TLS 區塊中分配記憶體

This article was translated from English: Does it need improvement?
Translated
View the article in English

在使用 IronPDF 的 LinuxARM 版本時,若嘗試在 Linux ARM 環境中動態載入 libcef.so,將會出現例外訊息。 此時將會出現以下例外訊息。

IronSoftware.Exceptions.IronSoftwareDeploymentException: Error while deploying IronPdf Chrome renderer: '/irontest/testIronPdfOnLinuxArm/bin/Debug/net8.0/runtimes/linux-arm64/native/libcef.so: cannot allocate memory in static TLS block'. To learn more about making an engineering support request please visit: . To learn how to solve this issue please read https://ironpdf.com/troubleshooting/error-while-deploying-chrome-dependencies/ [Issue Code IRONPDF-CHROME-DEPLOYMENT-ERROR-LINUX]

問題

在 Linux ARM 系統上動態載入 libcef.so 時,可能會遇到以下錯誤訊息:"無法在靜態 TLS 區塊中分配記憶體。"此錯誤是 Chromium Embedded Framework (CEF) 已知的問題。 此問題的成因在於,CEF 的新版本所需的執行緒局部儲存空間 (TLS) 比 Linux 動態連結器預設分配的空間更多。 此問題已有充分文件記載,並同時影響 Linux ARM 處理器與 Linux ARM x64 系統,這兩類系統在運行新版 CEF 時均會遭遇 Thread Local Storage (TLS) 空間不足的問題。 您可在此處查閱更多相關資訊及此議題的討論內容。

解決方案

解決此例外情況的方法,是在執行應用程式之前手動設定,如下所示。

export LD_PRELOAD=/path/to/libcef.so
export LD_PRELOAD=/path/to/libcef.so
SHELL

透過在 C# 程序啟動前手動設定 LD_PRELOAD,我們可強制連結器在載入其他函式庫之前,優先載入 libcef.so,以確保有足夠的 TLS 記憶體分配。 此方法已被證實極為有效,不僅能解決問題,更能防止因 TLS allocation 錯誤導致系統失敗。 您可以放心,此解決方案確實有效。

LD_PRELOAD 方法是其他使用者(包括 CEF 論壇)所推薦的最有效且最簡便的方法。

這目前僅是權宜之計,直到 CEF 最終為 ARM 版本解決此問題為止——正如他們針對 x64 版本所做的那樣,透過減少 libxml2 中的 TLS 使用來解決問題。然而,目前尚無明確的時間表說明 CEF 將何時處理此問題。

Curtis Chau
技術撰稿人

Curtis Chau 擁有卡爾頓大學(Carleton University)的電腦科學學士學位,專精於前端開發,並精通 Node.js、TypeScript、JavaScript 及 React。他熱衷於打造直觀且美觀的用戶介面,喜歡運用現代框架,並創建結構完善、視覺上吸引人的手冊。

除了開發工作之外,Curtis 對物聯網(IoT)抱有濃厚興趣,致力於探索整合硬體與軟體的創新方法。閒暇時,他喜歡玩遊戲和開發 Discord 機器人,將對科技的熱愛與創意相結合。

準備開始了嗎?
Nuget 下載 18,918,602 | 版本: 2026.5 just released
Still Scrolling Icon

還在往下捲動嗎?

想要快速確認成果嗎? PM > Install-Package IronPdf
執行範例 觀看您的 HTML 轉為 PDF。