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系统,二者都因缺少足够的线程本地存储(TLS)而无法支持较新版本的CEF。 您可以在这里找到关于该问题的更多信息和讨论。
解决方案
解决此异常的方法是在运行应用程序之前手动设置它,如下所示。
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解决这个问题,就像他们通过减少libxml2中的TLS使用解决了x64版本的问题。但没有明确的时间表说明CEF何时会解决这个问题。

