静态链接二进制文件可以需要共享库吗?

静态链接二进制文件可以需要共享库吗?

我这里有一个显然是静态链接的二进制文件:

$ file wkhtmltopdf-amd64
wkhtmltopdf-amd64: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), 
                   statically linked, stripped

$ ldd wkhtmltopdf-amd64
not a dynamic executable

$ readelf -d wkhtmltopdf-amd64 
There is no dynamic section in this file.

但是当我尝试执行它时,它会抱怨共享库丢失:

$ ./wkhtmltopdf-amd64 
./wkhtmltopdf-amd64: error while loading shared libraries: 
   libXrender.so.1: cannot open shared object file: No such file or directory

我的问题:

  • 我以为静态链接二进制文件不依赖于共享库。有人能纠正我这个明显错误的假设吗?
  • 我如何找到该二进制文件所依赖的所有库?

PS:有问题的二进制文件来自这里:http://code.google.com/p/wkhtmltopdf/downloads/list

答案1

是的,通过嵌入式库间接实现。

以下信息表明 QT 库是静态嵌入在二进制文件中的。使用 运行二进制文件strace,显示它确实尝试加载 Xorg 库,因为这些库未静态链接到 QT 库中。换句话说,一些静态链接库(最有可能是 QT)有自己的依赖项。至少我是这么认为的。

wkhhtmltopdf wiki-汇编:

在编译 wkhtmltopdf 之前,您需要安装 QT,同样,您有两个选择:您可以从发行版安装 QT,这会很快,但您的 wkhtmltopdf 构建将不具有静态构建的所有功能,或者您可以自己编译 QT,这需要很长时间,但您将获得所有功能。

wkhtmltopdf wiki - 静态(常见问题解答):

  • 我使用的是静态二进制文件,但字体错误,是正方形还是全黑?
    这很可能是因为您没有安装 X11 或没有安装正确的 X11 字体

QtGui 依赖于 Xorg & Co:

# qlist qtgui |grep lib.*\.so | awk -F/'{print $NF}'|column
libqtiff.so libQtScriptTools.so.4
libqjpeg.so libQtDesignerComponents.so.4.8
libqico.so libQtGui.so
libqgif.so libQtScriptTools.so
libqimsw-multi.so libQtGui.so.4
libqtaccessiblewidgets.so libQtDesigner.so
libQtDesigner.so.4.8.4 libQtDesignerComponents.so.4
libQtGui.so.4.8.4 libQtGui.so.4.8
libQtDesigner.so.4 libQtDesigner.so.4.8
libQtScriptTools.so.4.8.4 libQtScriptTools.so.4.8
libQtDesignerComponents.so.4.8.4 libQtDesignerComponents.so

       (>>> 取决于)

# qlist qtgui |grep lib.*\.so |xargs -L1 ldd | awk '{print $1}'| sort -u|column
libbz2.so.1 libpthread.so.0 libxcb.so.1
libc.so.6 libQtCore.so.4 libXcursor.so.1
libdl.so.2 libQtDesigner.so.4 libXdmcp.so.6
libexpat.so.1 libQtGui.so.4 libXext.so.6
libfontconfig.so.1 libQtScript.so.4 libXfixes.so.3
libfreetype.so.6 libQtXml.so.4 libXinerama.so.1
libgcc_s.so.1 librt.so.1 libXi.so.6
libglib-2.0.so.0 libSM.so.6 libXrandr.so.2
libICE.so.6 libstdc++.so.6 libXrender.so.1
libjpeg.so.8 libtiff.so.3 libz.so.1
/lib/ld-linux.so.2 libuuid.so.1 linux-gate.so.1
libm.so.6 libX11.so.6
libpng15.so.15 libXau.so.6

openStatic另外,我从我的发行版(动态)的存储库编译了该程序,并且和之间的区别openDynamic是:

# function openStatic { strace ./wkhtmltoimage/static/wkhtmltoimage-i386 \
      |& grep 'open.*3' |sort | grep -o '/[^"]*' ;}

# openStatic
/etc/ld.so.cache         /usr/lib/libexpat.so.1
/lib/ld-linux.so.2       /usr/lib/libfontconfig.so.1
/lib/libbz2.so.1         /usr/lib/libfreetype.so.6
/lib/libc.so.6           /usr/lib/libX11.so.6
/lib/libdl.so.2          /usr/lib/libXau.so.6
/lib/libgcc_s.so.1       /usr/lib/libxcb.so.1
/lib/libm.so.6           /usr/lib/libXdmcp.so.6
/lib/libpthread.so.0     /usr/lib/libXext.so.6
/lib/librt.so.1          /usr/lib/libXrender.so.1
/lib/libz.so.1
/usr/lib/gcc/i686-pc-linux-gnu/4.5.3/libstdc++.so.6
------ 静态嵌入库 ------ --- 动态链接依赖项 ---
1 l/ld-linux.so.2 1 ul/libk5crypto.so.3 2 /etc/ld.so.cache
1 l/libcom_err.so.2 1 ul/libkrb5.so.3 2 /lib/libbz2.so.1
1 l/libkeyutils.so.1 1 ul/libkrb5support.so.0 2 /lib/libc.so.6
1 l/libresolv.so.2 1 ul/liborc-0.4.so.0 2 /lib/libdl.so.2
1 l/libuuid.so.1 1 ul/libpng15.so.15 2 /lib/libgcc_s.so.1
1 ul/gconv/gconv-modules.cache 1 ul/libSM.so.6 2 /lib/libm.so.6
1 ul/gconv/UTF-16.so 1 ul/libsqlite3.so.0 2 /lib/libpthread.so.0
1 ul/libcrypto.so.1.0.0 1 ul/libssl.so.1.0.0 2 /lib/librt.so.1
1 ul/libffi.so.5 1 ul/libwkhtmltox.so.0 2 /lib/libz.so.1
1 ul/libglib-2.0.so.0 1 ul/libXcursor.so.1 2 ul/gcc/.../libstdc++.so.6
1 ul/libgmodule-2.0.so.0 1 ul/libXfixes.so.3 2 ul/libexpat.so.1
1 ul/libgobject-2.0.so.0 1 ul/libXinerama.so.1 2 ul/libfontconfig.so.1
1 ul/libgstapp-0.10.so.0 1 ul/libXi.so.6 2 ul/libfreetype.so.6
1 ul/libgstbase-0.10.so.0 1 ul/libxml2.so.2 2 ul/libX11.so.6
1 ul/libgstinterfaces-0.10.so.0 1 ul/libXrandr.so.2 2 ul/libXau.so.6
1 ul/libgstpbutils-0.10.so.0 1 ul/qt4/libQtCore.so.4 2 ul/libxcb.so.1
1 ul/libgstreamer-0.10.so.0 1 ul/qt4/libQtGui.so.4 2 ul/libXdmcp.so.6
1 ul/libgstvideo-0.10.so.0 1 ul/qt4/libQtNetwork.so.4 2 ul/libXext.so.6
1 ul/libgthread-2.0.so.0 1 ul/qt4/libQtSvg.so.4 2 ul/libXrender.so.1
1 ul/libICE.so.6 1 ul/qt4/libQtWebKit.so.4

更多信息:
静态链接
你的问题(重复,眨眼)

相关内容