我在这里有一个明显静态链接的二进制文件:
$ 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
是的,通过embedded式库间接。
下面的信息表明,QT库是静态embedded到二进制文件中的。 使用strace运行二进制文件显示,它确实试图加载Xorg库,因为它们不是在QT库中静态链接的。 换句话说,一些静态链接库(很可能是QT)具有自己的依赖关系。 至less这是我的想法。
wkhhtmltopdf维基 – 编译:
在编译wkhtmltopdf之前,你需要安装QT,再次有两个select:你可以从你的发行版本安装QT,这将会很快,但是你的wkhtmltopdf版本将不具备静态编译的所有function,或者你可以编译QT你的自我,这需要很长的时间,但你会得到所有的function。
wkhtmltopdf wiki – 静态(faq):
QtGui取决于Xorg&Co:
#qlist qtgui | grep lib。* \。so | awk -F /'{print $ NF}'|列
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}'| sorting-u |列
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
另外,我从我的发行版(dynamic)编译了程序, 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
------静态embedded库------ ---dynamic链接依赖关系--- 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
更多信息:
静态链接
你的问题在SO (重复,wink-wink)