IronPDF.LinuxARM: Cannot allocate memory in static TLS block

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 嵌入框架(CEF)有關。 這是因為較新的 CEF 版本需要比 Linux 動態鏈接預設分配的更多的執行緒本地儲存(TLS)空間。 此問題被非常詳細地記錄,並同時影響 Linux ARM 處理器和 Linux ARM x64 系統,兩者在處理新版本的 CEF 時都沒有足夠的執行緒本地儲存(TLS)。 您可以在這裡找到更多資訊及討論。

解決方案

此異常的解決方案是,應在運行應用程式前手動設置,如下所示。

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

通過在 C# 進程前手動設置 LD_PRELOAD,我們強制鏈接器首先加載 libcef.so,在其他庫之前,確保足夠的 TLS 記憶體分配。 此方法已被證明非常有效,可以解決問題並防止出現 TLS 分配錯誤。 您可以確信此解決方案是有效的。

LD_PRELOAD 方法是由其他用戶,包括CEF 論壇推薦的最為有效且簡單的方法。

目前這是一個替代方案,直到 CEF 最終解決 ARM 的問題,就像他們為 x64 構建版本中通過減少 libxml2 的 TLS 使用來解決問題一樣。然而,目前尚無 CEF 將何時解決此問題的明確時間表。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。

準備好開始了嗎?
Nuget 下載 16,133,208 | 版本: 2025.11 剛剛發布