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