我有一个静态链接的二进制文件的工具,我试图对RHLE4运行。该工具抱怨 glibc。它需要2.4,系统中的一个是2.3。这是它吐出的消息:
./wkhtmltoimage-i386: /lib/tls/libc.so.6: version `GLIBC_2.4' not found (required by ./wkhtmltoimage-i386)
Run Code Online (Sandbox Code Playgroud)
有没有办法构建 glibc2.4 并将其仅用于此工具,而无需替换系统中的 glibc2.3?在构建 glibc2.4 时,我应该为 configure 使用什么前缀?
Ric*_*rri 12
由于此 wkhtmltoimage 工具的源代码可用,我建议您 使用系统的本机 glibc 从源代码重新编译它。它可能比重新编译 glibc 更快,这不是一件容易的事。
一个静态链接的可执行文件已经包含了所有代码的C库调用它需要做,所以你不能单独编译新的glibc和可执行文件链接到它。然而,使用 glibc 的程序从来都不是完全静态的:一些库调用(所有那些与“名称服务”相关的,即,getuid()
和类似的)仍然使用动态加载的模块(libnss*.so
通常在 下找到的文件/lib
)。这可能是程序失败的原因:它正在寻找一些 NSS 模块,但只能找到glibc2.3
那些。
如果您绝对想重新编译 glibc,以下可能有效(警告:未经测试!):
配置glibc2.4安装在非系统目录,例如/usr/local/glibc2.4
,然后编译安装;
wkhtmlto*
通过将其指定为动态链接器搜索路径 ( LD_LIBRARY_PATH
) 中的第一个组件来运行:
环境 LD_LIBRARY_PATH=/usr/local/glibc2.4/lib wkhtmltoimage ...
更新:事实证明这并不容易:系统上有两个不同的 libc 需要的不仅仅是重新编译/安装,因为 libc 将在固定位置查找运行时链接器和动态加载 NSS 模块。该rtldi程序允许安装不同版本的单一Linux系统上的GNU libc中的; 它的网页有说明(但这是一个专家级的任务,所以它们绝对不是一步一步的演练)。
让我再次强调,重新编译的工作量会少得多wkhtmltoimage
......
归档时间: |
|
查看次数: |
8026 次 |
最近记录: |