Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Run patchelf on the same binary 64 times causes cannot execute binary file: Exec format error #96

Open
sjackman opened this issue May 3, 2016 · 11 comments

Comments

@sjackman
Copy link

sjackman commented May 3, 2016

for i in {0..100}; do
  echo $i
  patchelf --set-interpreter /lib64/ld-linux-x86-64.so.2 --set-rpath /home/linuxbrew/.linuxbrew/lib git
  ./git --version || break
done
…
62
git version 2.8.0
63
git version 2.8.0
64
bash: ./git: cannot execute binary file: Exec format error
@sjackman
Copy link
Author

sjackman commented May 3, 2016

Alternating between setting the interpreter and setting the rpath causes the failure. Setting the interpreter 100 times and then setting the rpath 100 times is just fine.

@sjackman
Copy link
Author

sjackman commented May 3, 2016

A simple solution for my use case would be for patchelf to check if the current values match the requested values, and if so do nothing.

This issue arose because an installation of git includes 114 hard links to the git executable, and I'm running patchelf on each one.

@pratikpparikh
Copy link

Dear Contributor,

   I am running into the same issue, after 65 patching add-needed libraries any new additional add-needed causes corruption of executable.  @sjackman  did you find any solution?

Regards,
Pratik Parikh

@sjackman
Copy link
Author

sjackman commented Jan 8, 2019

Yes, don't run patchelf 65 times on the same executable. 😛

@pratikpparikh
Copy link

@sjackman well i need to when i make postgres portable build :(

@sjackman
Copy link
Author

Can you combine the multiple invocations of patchelf into a single invocation?

@pratikpparikh
Copy link

@sjackman not sure what you mean do you have an example to share?

@sjackman
Copy link
Author

Can you give an example of what you're trying to accomplish, and why you're running patchelf 65 times on the same executable?

@pratikpparikh
Copy link

pratikpparikh commented Jan 10, 2019

Below is the example of what i am doing, if there is a way to address this with single line it will help me. If don't do add-needed then dynamic library will have missing dependencies "not found"

patchelf --remove-needed liblwgeom-2.5.so.0 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libgdal.so.20 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libgeos_c.so.1 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/liblwgeom-2.5.so.0 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libarmadillo.so.7 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libcurl-gnutls.so.4 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libdapclient.so.6 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libdapserver.so.7 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libdap.so.23 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libdfalt.so.0 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libepsilon.so.1 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libexpat.so.1 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libfreexl.so.1 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libgeos-3.5.1.so /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libgeotiff.so.2 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libgif.so.7 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libhdf5_serial_hl.so.100 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libhdf5_serial.so.100 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libjpeg.so.62 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libjson-c.so.3 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libkmlbase.so.1 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libkmldom.so.1 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libkmlengine.so.1 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libkmlregionator.so.1 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libkmlxsd.so.1 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libkmlconvenience.so.1 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libmariadbclient.so.18 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libmfhdfalt.so.0 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libnetcdf.so.11 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libodbcinst.so.2 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libodbc.so.2 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libogdi.so.3.2 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libopenjp2.so.7 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libpng16.so.16 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libpoppler.so.64 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libpq.so.5 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libproj.so.12 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libqhull.so.7 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libSFCGAL.so.1 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libspatialite.so.7 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libsz.so.2 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libtiff.so.5 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libwebp.so.6 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libxerces-c-3.1.so /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libxml2.so.2 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libaec.so.0 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libarpack.so.2 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libblas.so.3 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libfontconfig.so.1 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libfreetype.so.6 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libjbig.so.0 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/liblapack.so.3 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/liblcms2.so.2 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libltdl.so.7 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libminizip.so.1 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libnspr4.so /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libnss3.so /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libnssutil3.so /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libplc4.so /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libplds4.so /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libpopt.so.0 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libsmime3.so /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libssl3.so /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libsuperlu.so.5 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/liburiparser.so.1 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libboost_chrono.so.1.62.0 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libboost_date_time.so.1.62.0 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libboost_filesystem.so.1.62.0 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libboost_program_options.so.1.62.0 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libboost_serialization.so.1.62.0 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libboost_system.so.1.62.0 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libboost_thread.so.1.62.0 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libboost_timer.so.1.62.0 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libboost_unit_test_framework.so.1.62.0 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libicuuc.so.57 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libicui18n.so.57 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libicudata.so.57 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libidn2.so.0 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libnghttp2.so.14 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/librtmp.so.1 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libpsl.so.5 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libssh2.so.1 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libCGAL_Core.so.12 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libCGAL.so.12 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libmpfr.so.4 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libunistring.so.0 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libquadmath.so.0 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libosgUtil.so.100 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libosg.so.100 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libosgDB.so.100 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libgfortran.so.3 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libOpenThreads.so.20 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libGL.so.1 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libdrm.so.2 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libexpat.so.1 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libglapi.so.0 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libX11.so.6 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libX11-xcb.so.1 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libxcb.so.1 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libxcb-sync.so.1 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libxcb-present.so.0 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libxcb-glx.so.0 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libxcb-dri3.so.0 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libxcb-dri2.so.0 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libXdamage.so.1 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libXext.so.6 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libXfixes.so.3 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libxshmfence.so.1 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libXxf86vm.so.1 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libXau.so.6 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libXdmcp.so.6 /var/lib/postgresql/bin/raster2pgsql
&& patchelf --add-needed /var/lib/postgresql/lib/libbsd.so.0 /var/lib/postgresql/bin/raster2pgsql \

@sjackman
Copy link
Author

Try…

patchelf \
--remove-needed liblwgeom-2.5.so.0 \
--add-needed /var/lib/postgresql/lib/libgdal.so.20 \
--add-needed /var/lib/postgresql/lib/libgeos_c.so.1 \
--add-needed /var/lib/postgresql/lib/liblwgeom-2.5.so.0 \
…
 /var/lib/postgresql/bin/raster2pgsql 

@pratikpparikh
Copy link

got you thank you

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants