eulerto / pgquarrel

pgquarrel compares PostgreSQL database schemas (DDL)
BSD 3-Clause "New" or "Revised" License
389 stars 42 forks source link

error while loading shared libraries #87

Closed mfn closed 4 years ago

mfn commented 4 years ago

Describe the bug I want to try out this application but unfortunately I'm not very familiar with compiling / install things from source.

I'm on Ubuntu 18.04 and followed the instructions from the readme, everything including make install worked but the final binary can't find the libmini.so library :-/

Your environment

Steps to reproduce

Compile and installation console output ``` ~/src $ ls -l total 120 -rw-rw-r-- 1 vagrant vagrant 120333 Feb 27 09:10 pgquarrel_0_7_0.tar.gz ~/src $ tar xzvf pgquarrel_0_7_0.tar.gz pgquarrel-pgquarrel_0_7_0/ pgquarrel-pgquarrel_0_7_0/.github/ pgquarrel-pgquarrel_0_7_0/.github/ISSUE_TEMPLATE/ pgquarrel-pgquarrel_0_7_0/.github/ISSUE_TEMPLATE/bug_report.md pgquarrel-pgquarrel_0_7_0/.github/ISSUE_TEMPLATE/feature_request.md pgquarrel-pgquarrel_0_7_0/.travis.yml pgquarrel-pgquarrel_0_7_0/CMakeLists.txt pgquarrel-pgquarrel_0_7_0/LICENSE pgquarrel-pgquarrel_0_7_0/README.md pgquarrel-pgquarrel_0_7_0/debian/ pgquarrel-pgquarrel_0_7_0/debian/changelog pgquarrel-pgquarrel_0_7_0/debian/compat pgquarrel-pgquarrel_0_7_0/debian/control pgquarrel-pgquarrel_0_7_0/debian/copyright pgquarrel-pgquarrel_0_7_0/debian/rules pgquarrel-pgquarrel_0_7_0/debian/source/ pgquarrel-pgquarrel_0_7_0/debian/source/format pgquarrel-pgquarrel_0_7_0/mini/ pgquarrel-pgquarrel_0_7_0/mini/CMakeLists.txt pgquarrel-pgquarrel_0_7_0/mini/mini-file.c pgquarrel-pgquarrel_0_7_0/mini/mini-file.h pgquarrel-pgquarrel_0_7_0/mini/mini-parser.c pgquarrel-pgquarrel_0_7_0/mini/mini-parser.h pgquarrel-pgquarrel_0_7_0/mini/mini-readline.c pgquarrel-pgquarrel_0_7_0/mini/mini-readline.h pgquarrel-pgquarrel_0_7_0/mini/mini-strip.c pgquarrel-pgquarrel_0_7_0/mini/mini-strip.h pgquarrel-pgquarrel_0_7_0/src/ pgquarrel-pgquarrel_0_7_0/src/aggregate.c pgquarrel-pgquarrel_0_7_0/src/aggregate.h pgquarrel-pgquarrel_0_7_0/src/am.c pgquarrel-pgquarrel_0_7_0/src/am.h pgquarrel-pgquarrel_0_7_0/src/cast.c pgquarrel-pgquarrel_0_7_0/src/cast.h pgquarrel-pgquarrel_0_7_0/src/collation.c pgquarrel-pgquarrel_0_7_0/src/collation.h pgquarrel-pgquarrel_0_7_0/src/common.c pgquarrel-pgquarrel_0_7_0/src/common.h pgquarrel-pgquarrel_0_7_0/src/conversion.c pgquarrel-pgquarrel_0_7_0/src/conversion.h pgquarrel-pgquarrel_0_7_0/src/domain.c pgquarrel-pgquarrel_0_7_0/src/domain.h pgquarrel-pgquarrel_0_7_0/src/eventtrigger.c pgquarrel-pgquarrel_0_7_0/src/eventtrigger.h pgquarrel-pgquarrel_0_7_0/src/extension.c pgquarrel-pgquarrel_0_7_0/src/extension.h pgquarrel-pgquarrel_0_7_0/src/fdw.c pgquarrel-pgquarrel_0_7_0/src/fdw.h pgquarrel-pgquarrel_0_7_0/src/function.c pgquarrel-pgquarrel_0_7_0/src/function.h pgquarrel-pgquarrel_0_7_0/src/index.c pgquarrel-pgquarrel_0_7_0/src/index.h pgquarrel-pgquarrel_0_7_0/src/language.c pgquarrel-pgquarrel_0_7_0/src/language.h pgquarrel-pgquarrel_0_7_0/src/matview.c pgquarrel-pgquarrel_0_7_0/src/matview.h pgquarrel-pgquarrel_0_7_0/src/operator.c pgquarrel-pgquarrel_0_7_0/src/operator.h pgquarrel-pgquarrel_0_7_0/src/policy.c pgquarrel-pgquarrel_0_7_0/src/policy.h pgquarrel-pgquarrel_0_7_0/src/privileges.c pgquarrel-pgquarrel_0_7_0/src/privileges.h pgquarrel-pgquarrel_0_7_0/src/publication.c pgquarrel-pgquarrel_0_7_0/src/publication.h pgquarrel-pgquarrel_0_7_0/src/quarrel.c pgquarrel-pgquarrel_0_7_0/src/quarrel.h pgquarrel-pgquarrel_0_7_0/src/rule.c pgquarrel-pgquarrel_0_7_0/src/rule.h pgquarrel-pgquarrel_0_7_0/src/schema.c pgquarrel-pgquarrel_0_7_0/src/schema.h pgquarrel-pgquarrel_0_7_0/src/sequence.c pgquarrel-pgquarrel_0_7_0/src/sequence.h pgquarrel-pgquarrel_0_7_0/src/server.c pgquarrel-pgquarrel_0_7_0/src/server.h pgquarrel-pgquarrel_0_7_0/src/statistics.c pgquarrel-pgquarrel_0_7_0/src/statistics.h pgquarrel-pgquarrel_0_7_0/src/subscription.c pgquarrel-pgquarrel_0_7_0/src/subscription.h pgquarrel-pgquarrel_0_7_0/src/table.c pgquarrel-pgquarrel_0_7_0/src/table.h pgquarrel-pgquarrel_0_7_0/src/textsearch.c pgquarrel-pgquarrel_0_7_0/src/textsearch.h pgquarrel-pgquarrel_0_7_0/src/transform.c pgquarrel-pgquarrel_0_7_0/src/transform.h pgquarrel-pgquarrel_0_7_0/src/trigger.c pgquarrel-pgquarrel_0_7_0/src/trigger.h pgquarrel-pgquarrel_0_7_0/src/type.c pgquarrel-pgquarrel_0_7_0/src/type.h pgquarrel-pgquarrel_0_7_0/src/usermapping.c pgquarrel-pgquarrel_0_7_0/src/usermapping.h pgquarrel-pgquarrel_0_7_0/src/view.c pgquarrel-pgquarrel_0_7_0/src/view.h pgquarrel-pgquarrel_0_7_0/test/ pgquarrel-pgquarrel_0_7_0/test/altersequence.sql pgquarrel-pgquarrel_0_7_0/test/dellstore-alter.sql pgquarrel-pgquarrel_0_7_0/test/dellstore.sql pgquarrel-pgquarrel_0_7_0/test/example.ini pgquarrel-pgquarrel_0_7_0/test/from-cast.sql pgquarrel-pgquarrel_0_7_0/test/from-collation.sql pgquarrel-pgquarrel_0_7_0/test/from-domain.sql pgquarrel-pgquarrel_0_7_0/test/from-eventtrigger.sql pgquarrel-pgquarrel_0_7_0/test/from-extension.sql pgquarrel-pgquarrel_0_7_0/test/from-fdw.sql pgquarrel-pgquarrel_0_7_0/test/from-function.sql pgquarrel-pgquarrel_0_7_0/test/from-index.sql pgquarrel-pgquarrel_0_7_0/test/from-language.sql pgquarrel-pgquarrel_0_7_0/test/from-matview.sql pgquarrel-pgquarrel_0_7_0/test/from-publication.sql pgquarrel-pgquarrel_0_7_0/test/from-schema.sql pgquarrel-pgquarrel_0_7_0/test/from-sequence.sql pgquarrel-pgquarrel_0_7_0/test/from-server.sql pgquarrel-pgquarrel_0_7_0/test/from-statistics.sql pgquarrel-pgquarrel_0_7_0/test/from-table.sql pgquarrel-pgquarrel_0_7_0/test/from-user-mapping.sql pgquarrel-pgquarrel_0_7_0/test/from-view.sql pgquarrel-pgquarrel_0_7_0/test/run-test.sh pgquarrel-pgquarrel_0_7_0/test/test-server1.sql pgquarrel-pgquarrel_0_7_0/test/test-server2.sql pgquarrel-pgquarrel_0_7_0/test/test.ini pgquarrel-pgquarrel_0_7_0/test/test2.ini pgquarrel-pgquarrel_0_7_0/test/to-cast.sql pgquarrel-pgquarrel_0_7_0/test/to-collation.sql pgquarrel-pgquarrel_0_7_0/test/to-domain.sql pgquarrel-pgquarrel_0_7_0/test/to-eventtrigger.sql pgquarrel-pgquarrel_0_7_0/test/to-extension.sql pgquarrel-pgquarrel_0_7_0/test/to-fdw.sql pgquarrel-pgquarrel_0_7_0/test/to-function.sql pgquarrel-pgquarrel_0_7_0/test/to-index.sql pgquarrel-pgquarrel_0_7_0/test/to-language.sql pgquarrel-pgquarrel_0_7_0/test/to-matview.sql pgquarrel-pgquarrel_0_7_0/test/to-publication.sql pgquarrel-pgquarrel_0_7_0/test/to-schema.sql pgquarrel-pgquarrel_0_7_0/test/to-sequence.sql pgquarrel-pgquarrel_0_7_0/test/to-server.sql pgquarrel-pgquarrel_0_7_0/test/to-statistics.sql pgquarrel-pgquarrel_0_7_0/test/to-table.sql pgquarrel-pgquarrel_0_7_0/test/to-user-mapping.sql pgquarrel-pgquarrel_0_7_0/test/to-view.sql pgquarrel-pgquarrel_0_7_0/test/travis/ pgquarrel-pgquarrel_0_7_0/test/travis/install-pgquarrel.sh pgquarrel-pgquarrel_0_7_0/test/travis/run-tests.sh pgquarrel-pgquarrel_0_7_0/test/travis/setup-pg.sh ~/src $ cd pgquarrel-pgquarrel_0_7_0/ ~/src/pgquarrel-pgquarrel_0_7_0 $ cmake -DCMAKE_INSTALL_PREFIX=$HOME/pgquarrel -DCMAKE_PREFIX_PATH=/usr/lib/postgresql/12 . -- The C compiler identification is GNU 7.4.0 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done pg_config: /usr/lib/postgresql/12/bin/pg_config PostgreSQL FOUND: LIBS: /usr/lib/postgresql/12/lib/libpgport.a;/usr/lib/postgresql/12/lib/libpgcommon.a PostgreSQL LIBRARIES: /usr/lib/x86_64-linux-gnu/libpq.so PostgreSQL LIBRARY DIRS: /usr/lib/x86_64-linux-gnu PostgreSQL INCLUDE DIRS: /usr/include/postgresql/12/server;/usr/include/postgresql -- Configuring done -- Generating done -- Build files have been written to: /home/vagrant/src/pgquarrel-pgquarrel_0_7_0 ~/src/pgquarrel-pgquarrel_0_7_0 $ make Scanning dependencies of target mini [ 2%] Building C object mini/CMakeFiles/mini.dir/mini-file.c.o [ 5%] Building C object mini/CMakeFiles/mini.dir/mini-parser.c.o [ 7%] Building C object mini/CMakeFiles/mini.dir/mini-readline.c.o [ 10%] Building C object mini/CMakeFiles/mini.dir/mini-strip.c.o [ 13%] Linking C shared library libmini.so [ 13%] Built target mini Scanning dependencies of target pgquarrel [ 15%] Building C object CMakeFiles/pgquarrel.dir/src/am.c.o [ 18%] Building C object CMakeFiles/pgquarrel.dir/src/aggregate.c.o [ 21%] Building C object CMakeFiles/pgquarrel.dir/src/cast.c.o [ 23%] Building C object CMakeFiles/pgquarrel.dir/src/collation.c.o [ 26%] Building C object CMakeFiles/pgquarrel.dir/src/common.c.o [ 28%] Building C object CMakeFiles/pgquarrel.dir/src/conversion.c.o [ 31%] Building C object CMakeFiles/pgquarrel.dir/src/domain.c.o [ 34%] Building C object CMakeFiles/pgquarrel.dir/src/eventtrigger.c.o [ 36%] Building C object CMakeFiles/pgquarrel.dir/src/extension.c.o [ 39%] Building C object CMakeFiles/pgquarrel.dir/src/fdw.c.o [ 42%] Building C object CMakeFiles/pgquarrel.dir/src/function.c.o [ 44%] Building C object CMakeFiles/pgquarrel.dir/src/index.c.o [ 47%] Building C object CMakeFiles/pgquarrel.dir/src/language.c.o [ 50%] Building C object CMakeFiles/pgquarrel.dir/src/matview.c.o [ 52%] Building C object CMakeFiles/pgquarrel.dir/src/operator.c.o [ 55%] Building C object CMakeFiles/pgquarrel.dir/src/policy.c.o [ 57%] Building C object CMakeFiles/pgquarrel.dir/src/publication.c.o [ 60%] Building C object CMakeFiles/pgquarrel.dir/src/privileges.c.o [ 63%] Building C object CMakeFiles/pgquarrel.dir/src/quarrel.c.o [ 65%] Building C object CMakeFiles/pgquarrel.dir/src/rule.c.o [ 68%] Building C object CMakeFiles/pgquarrel.dir/src/schema.c.o [ 71%] Building C object CMakeFiles/pgquarrel.dir/src/sequence.c.o [ 73%] Building C object CMakeFiles/pgquarrel.dir/src/server.c.o [ 76%] Building C object CMakeFiles/pgquarrel.dir/src/statistics.c.o [ 78%] Building C object CMakeFiles/pgquarrel.dir/src/subscription.c.o [ 81%] Building C object CMakeFiles/pgquarrel.dir/src/table.c.o [ 84%] Building C object CMakeFiles/pgquarrel.dir/src/textsearch.c.o [ 86%] Building C object CMakeFiles/pgquarrel.dir/src/transform.c.o [ 89%] Building C object CMakeFiles/pgquarrel.dir/src/trigger.c.o [ 92%] Building C object CMakeFiles/pgquarrel.dir/src/type.c.o [ 94%] Building C object CMakeFiles/pgquarrel.dir/src/usermapping.c.o [ 97%] Building C object CMakeFiles/pgquarrel.dir/src/view.c.o [100%] Linking C executable pgquarrel [100%] Built target pgquarrel ~/src/pgquarrel-pgquarrel_0_7_0 $ make install [ 13%] Built target mini [100%] Built target pgquarrel Install the project... -- Install configuration: "" -- Installing: /home/vagrant/pgquarrel/bin/pgquarrel -- Set runtime path of "/home/vagrant/pgquarrel/bin/pgquarrel" to "" -- Installing: /home/vagrant/pgquarrel/lib/libmini.so ~/src/pgquarrel-pgquarrel_0_7_0 $ ```

In my case it's installed in ~/pgquarrel:

~ $ find ~/pgquarrel/
/home/vagrant/pgquarrel/
/home/vagrant/pgquarrel/lib
/home/vagrant/pgquarrel/lib/libmini.so
/home/vagrant/pgquarrel/bin
/home/vagrant/pgquarrel/bin/pgquarrel

Trying to run it:

~ $ pgquarrel/bin/pgquarrel
pgquarrel/bin/pgquarrel: error while loading shared libraries: libmini.so: cannot open shared object file: No such file or directory

A bit googling led me to setting LD_LIBRARY_PATH, but then I get a segfault 🤷‍♀️

~ $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/vagrant/pgquarrel/lib
~ $ pgquarrel/bin/pgquarrel
Segmentation fault (core dumped)
ldd output on the binary ``` ~ $ ldd pgquarrel/bin/pgquarrel linux-vdso.so.1 (0x00007ffdf4d65000) libpq.so.5 => /usr/lib/x86_64-linux-gnu/libpq.so.5 (0x00007fc424188000) libmini.so => /home/vagrant/pgquarrel/lib/libmini.so (0x00007fc423f84000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc423b93000) libssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007fc423906000) libcrypto.so.1.1 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007fc42343b000) libgssapi_krb5.so.2 => /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007fc4231f0000) libldap_r-2.4.so.2 => /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2 (0x00007fc422f9e000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc422d7f000) /lib64/ld-linux-x86-64.so.2 (0x00007fc42464f000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc422b7b000) libkrb5.so.3 => /usr/lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007fc4228a5000) libk5crypto.so.3 => /usr/lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007fc422673000) libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007fc42246f000) libkrb5support.so.0 => /usr/lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007fc422264000) liblber-2.4.so.2 => /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2 (0x00007fc422056000) libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007fc421e3b000) libsasl2.so.2 => /usr/lib/x86_64-linux-gnu/libsasl2.so.2 (0x00007fc421c20000) libgssapi.so.3 => /usr/lib/x86_64-linux-gnu/libgssapi.so.3 (0x00007fc4219df000) libgnutls.so.30 => /usr/lib/x86_64-linux-gnu/libgnutls.so.30 (0x00007fc42167a000) libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007fc421476000) libheimntlm.so.0 => /usr/lib/x86_64-linux-gnu/libheimntlm.so.0 (0x00007fc42126d000) libkrb5.so.26 => /usr/lib/x86_64-linux-gnu/libkrb5.so.26 (0x00007fc420fe0000) libasn1.so.8 => /usr/lib/x86_64-linux-gnu/libasn1.so.8 (0x00007fc420d3e000) libhcrypto.so.4 => /usr/lib/x86_64-linux-gnu/libhcrypto.so.4 (0x00007fc420b08000) libroken.so.18 => /usr/lib/x86_64-linux-gnu/libroken.so.18 (0x00007fc4208f2000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fc4206d5000) libp11-kit.so.0 => /usr/lib/x86_64-linux-gnu/libp11-kit.so.0 (0x00007fc4203a6000) libidn2.so.0 => /usr/lib/x86_64-linux-gnu/libidn2.so.0 (0x00007fc420189000) libunistring.so.2 => /usr/lib/x86_64-linux-gnu/libunistring.so.2 (0x00007fc41fe0b000) libtasn1.so.6 => /usr/lib/x86_64-linux-gnu/libtasn1.so.6 (0x00007fc41fbf8000) libnettle.so.6 => /usr/lib/x86_64-linux-gnu/libnettle.so.6 (0x00007fc41f9c2000) libhogweed.so.4 => /usr/lib/x86_64-linux-gnu/libhogweed.so.4 (0x00007fc41f78e000) libgmp.so.10 => /usr/lib/x86_64-linux-gnu/libgmp.so.10 (0x00007fc41f50d000) libwind.so.0 => /usr/lib/x86_64-linux-gnu/libwind.so.0 (0x00007fc41f2e4000) libheimbase.so.1 => /usr/lib/x86_64-linux-gnu/libheimbase.so.1 (0x00007fc41f0d5000) libhx509.so.5 => /usr/lib/x86_64-linux-gnu/libhx509.so.5 (0x00007fc41ee8b000) libsqlite3.so.0 => /usr/lib/x86_64-linux-gnu/libsqlite3.so.0 (0x00007fc41eb82000) libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007fc41e94a000) libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007fc41e742000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc41e3a4000) ```

ldd on the library:

~ $ ldd pgquarrel/lib/libmini.so
    linux-vdso.so.1 (0x00007ffee19f0000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fafef4f6000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fafefaeb000)

I'm at loss how to proceed now. Is there a pre-built deb maybe somewhere :)

Thank you!

eulerto commented 4 years ago

@mfn Thanks for your report. It is failing while error out (because you don't provide a database name -- it is not wrong and it should handle NULL). I'll provide a fix. If you don't want to wait for a fix, create a ini file with credentials (host, port, dbname, username) or use --target-* and --source-* options.

mfn commented 4 years ago

Indeed, when I e.g. use --help I can run it. Oh wow, call me lazy, didn't try that…

eulerto commented 4 years ago

It was fixed in commit 552fe30db4f97528ff15b90aef5b9afdd50832ce.

mfn commented 4 years ago

@eulerto apologies, but I was wondering: what about the problem with the library loading?

I didn't find it in the readme. Is having to use LD_* env var expected?

Thanks