我在使用 dlopen() 加载库时遇到此错误:
Cannot dlopen load module '/usr/lib/pa20_64/libpthread.1' because it contains thread specific data.
我在谷歌上查了一下,下面的导出修复了它。
export LD_PRELOAD=/usr/lib/hpux64/libpthread.so.1
谁能告诉我 LD_PRELOAD 到底做了什么以及为什么我必须预加载这个库?为什么链接器不加载它?
使用 -lpthread 编译也无济于事。
ENV:HP-UX hhtenb1 B.11.31 U ia64 3881169896 无限用户许可证
最佳答案
我无法告诉您有关 HPUX 的所有详细信息,但请尝试将您的程序与 -lpthread 链接 - 这可能会解决您的问题。
实际上,您正在 dlopen()ing 的库似乎在运行时四处挖掘以查找 libpthread 的版本。 LD_PRELOAD 只是加载指定的库,就好像你已经 dlopened 它们一样,但它在程序有机会开始运行之前就完成了。
不确定细节,但有一个模糊的猜测:您正在使用的某些库在您的 dlopen 触发加载 libpthread 之前调用了 pthread 静态数据函数(但是如果第一个库有它,为什么它会尝试加载 pthread作为依赖项?- 不确定/也许这表明以前的库静态链接了一些 pthread 内容?)。
关于linux - 无法 dlopen 加载模块 '/usr/lib/pa20_64/libpthread.1',因为它包含线程特定数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4142552/