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大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

準備開始了嗎?
Nuget 下載 19,936,792 | 版本: 2026.7 剛剛發布
Still Scrolling Icon

還在捲動嗎?

想快速獲得證明嗎? PM > Install-Package IronPdf
執行範例 看您的HTML變成PDF。