IronPdf.LinuxARM:無法在靜態 TLS 區塊中分配記憶體
在使用 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
透過在 C# 程序啟動前手動設定 LD_PRELOAD,我們可強制連結器在載入其他函式庫之前,優先載入 libcef.so,以確保有足夠的 TLS 記憶體分配。 此方法已被證實極為有效,不僅能解決問題,更能防止因 TLS allocation 錯誤導致系統失敗。 您可以放心,此解決方案確實有效。
LD_PRELOAD 方法是其他使用者(包括 CEF 論壇)所推薦的最有效且最簡便的方法。
這目前僅是權宜之計,直到 CEF 最終為 ARM 版本解決此問題為止——正如他們針對 x64 版本所做的那樣,透過減少 libxml2 中的 TLS 使用來解決問題。然而,目前尚無明確的時間表說明 CEF 將何時處理此問題。

