eulerto / pgquarrel

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

Link project specific library statically #88

Closed mfn closed 4 years ago

mfn commented 4 years ago

Apologize upfront if this is not the right way to do: I've no real experience with C / cmake

This is inspired by the problem I hit with https://github.com/eulerto/pgquarrel/issues/87

I could only "fix" it using LD_PRELOAD but I thought what if we can just link the (internal) library statically, then this issue would be gone.

I tested this only on Linux and it worked for me.

Upon installation it still installs libmini.a though, not sure if this is ok?

# installation directory
$ cd pgquarrel ; find
.
./lib
./lib/libmini.a
./bin
./bin/pgquarrel
eulerto commented 4 years ago

What is OS? Ubuntu? Could you share the last lines from make VERBOSE=1 step (without your patch)? Could you provide the output after you build (without your patch): ldd ./pgquarrel

mfn commented 4 years ago

Apologies for lacking all the details:

$ uname -a
Linux dev 4.15.0-65-generic #74-Ubuntu SMP Tue Sep 17 17:06:04 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"
The make VERBOSE=1 output ``` $ pwd /home/vagrant/tmp/pgquarrel-master $ 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/tmp/pgquarrel-master $ make VERBOSE=1 /usr/bin/cmake -H/home/vagrant/tmp/pgquarrel-master -B/home/vagrant/tmp/pgquarrel-master --check-build-system CMakeFiles/Makefile.cmake 0 /usr/bin/cmake -E cmake_progress_start /home/vagrant/tmp/pgquarrel-master/CMakeFiles /home/vagrant/tmp/pgquarrel-master/CMakeFiles/progress.marks make -f CMakeFiles/Makefile2 all make[1]: Entering directory '/home/vagrant/tmp/pgquarrel-master' make -f mini/CMakeFiles/mini.dir/build.make mini/CMakeFiles/mini.dir/depend make[2]: Entering directory '/home/vagrant/tmp/pgquarrel-master' cd /home/vagrant/tmp/pgquarrel-master && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/vagrant/tmp/pgquarrel-master /home/vagrant/tmp/pgquarrel-master/mini /home/vagrant/tmp/pgquarrel-master /home/vagrant/tmp/pgquarrel-master/mini /home/vagrant/tmp/pgquarrel-master/mini/CMakeFiles/mini.dir/DependInfo.cmake --color= Dependee "/home/vagrant/tmp/pgquarrel-master/mini/CMakeFiles/mini.dir/DependInfo.cmake" is newer than depender "/home/vagrant/tmp/pgquarrel-master/mini/CMakeFiles/mini.dir/depend.internal". Dependee "/home/vagrant/tmp/pgquarrel-master/mini/CMakeFiles/CMakeDirectoryInformation.cmake" is newer than depender "/home/vagrant/tmp/pgquarrel-master/mini/CMakeFiles/mini.dir/depend.internal". Scanning dependencies of target mini make[2]: Leaving directory '/home/vagrant/tmp/pgquarrel-master' make -f mini/CMakeFiles/mini.dir/build.make mini/CMakeFiles/mini.dir/build make[2]: Entering directory '/home/vagrant/tmp/pgquarrel-master' [ 2%] Building C object mini/CMakeFiles/mini.dir/mini-file.c.o cd /home/vagrant/tmp/pgquarrel-master/mini && /usr/bin/cc -Dmini_EXPORTS -fPIC -o CMakeFiles/mini.dir/mini-file.c.o -c /home/vagrant/tmp/pgquarrel-master/mini/mini-file.c [ 5%] Building C object mini/CMakeFiles/mini.dir/mini-parser.c.o cd /home/vagrant/tmp/pgquarrel-master/mini && /usr/bin/cc -Dmini_EXPORTS -fPIC -o CMakeFiles/mini.dir/mini-parser.c.o -c /home/vagrant/tmp/pgquarrel-master/mini/mini-parser.c [ 7%] Building C object mini/CMakeFiles/mini.dir/mini-readline.c.o cd /home/vagrant/tmp/pgquarrel-master/mini && /usr/bin/cc -Dmini_EXPORTS -fPIC -o CMakeFiles/mini.dir/mini-readline.c.o -c /home/vagrant/tmp/pgquarrel-master/mini/mini-readline.c [ 10%] Building C object mini/CMakeFiles/mini.dir/mini-strip.c.o cd /home/vagrant/tmp/pgquarrel-master/mini && /usr/bin/cc -Dmini_EXPORTS -fPIC -o CMakeFiles/mini.dir/mini-strip.c.o -c /home/vagrant/tmp/pgquarrel-master/mini/mini-strip.c [ 13%] Linking C shared library libmini.so cd /home/vagrant/tmp/pgquarrel-master/mini && /usr/bin/cmake -E cmake_link_script CMakeFiles/mini.dir/link.txt --verbose=1 /usr/bin/cc -fPIC -shared -Wl,-soname,libmini.so -o libmini.so CMakeFiles/mini.dir/mini-file.c.o CMakeFiles/mini.dir/mini-parser.c.o CMakeFiles/mini.dir/mini-readline.c.o CMakeFiles/mini.dir/mini-strip.c.o make[2]: Leaving directory '/home/vagrant/tmp/pgquarrel-master' [ 13%] Built target mini make -f CMakeFiles/pgquarrel.dir/build.make CMakeFiles/pgquarrel.dir/depend make[2]: Entering directory '/home/vagrant/tmp/pgquarrel-master' cd /home/vagrant/tmp/pgquarrel-master && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/vagrant/tmp/pgquarrel-master /home/vagrant/tmp/pgquarrel-master /home/vagrant/tmp/pgquarrel-master /home/vagrant/tmp/pgquarrel-master /home/vagrant/tmp/pgquarrel-master/CMakeFiles/pgquarrel.dir/DependInfo.cmake --color= Dependee "/home/vagrant/tmp/pgquarrel-master/CMakeFiles/pgquarrel.dir/DependInfo.cmake" is newer than depender "/home/vagrant/tmp/pgquarrel-master/CMakeFiles/pgquarrel.dir/depend.internal". Dependee "/home/vagrant/tmp/pgquarrel-master/CMakeFiles/CMakeDirectoryInformation.cmake" is newer than depender "/home/vagrant/tmp/pgquarrel-master/CMakeFiles/pgquarrel.dir/depend.internal". Scanning dependencies of target pgquarrel make[2]: Leaving directory '/home/vagrant/tmp/pgquarrel-master' make -f CMakeFiles/pgquarrel.dir/build.make CMakeFiles/pgquarrel.dir/build make[2]: Entering directory '/home/vagrant/tmp/pgquarrel-master' [ 15%] Building C object CMakeFiles/pgquarrel.dir/src/am.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/am.c.o -c /home/vagrant/tmp/pgquarrel-master/src/am.c [ 18%] Building C object CMakeFiles/pgquarrel.dir/src/aggregate.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/aggregate.c.o -c /home/vagrant/tmp/pgquarrel-master/src/aggregate.c [ 21%] Building C object CMakeFiles/pgquarrel.dir/src/cast.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/cast.c.o -c /home/vagrant/tmp/pgquarrel-master/src/cast.c [ 23%] Building C object CMakeFiles/pgquarrel.dir/src/collation.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/collation.c.o -c /home/vagrant/tmp/pgquarrel-master/src/collation.c [ 26%] Building C object CMakeFiles/pgquarrel.dir/src/common.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/common.c.o -c /home/vagrant/tmp/pgquarrel-master/src/common.c [ 28%] Building C object CMakeFiles/pgquarrel.dir/src/conversion.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/conversion.c.o -c /home/vagrant/tmp/pgquarrel-master/src/conversion.c [ 31%] Building C object CMakeFiles/pgquarrel.dir/src/domain.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/domain.c.o -c /home/vagrant/tmp/pgquarrel-master/src/domain.c [ 34%] Building C object CMakeFiles/pgquarrel.dir/src/eventtrigger.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/eventtrigger.c.o -c /home/vagrant/tmp/pgquarrel-master/src/eventtrigger.c [ 36%] Building C object CMakeFiles/pgquarrel.dir/src/extension.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/extension.c.o -c /home/vagrant/tmp/pgquarrel-master/src/extension.c [ 39%] Building C object CMakeFiles/pgquarrel.dir/src/fdw.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/fdw.c.o -c /home/vagrant/tmp/pgquarrel-master/src/fdw.c [ 42%] Building C object CMakeFiles/pgquarrel.dir/src/function.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/function.c.o -c /home/vagrant/tmp/pgquarrel-master/src/function.c [ 44%] Building C object CMakeFiles/pgquarrel.dir/src/index.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/index.c.o -c /home/vagrant/tmp/pgquarrel-master/src/index.c [ 47%] Building C object CMakeFiles/pgquarrel.dir/src/language.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/language.c.o -c /home/vagrant/tmp/pgquarrel-master/src/language.c [ 50%] Building C object CMakeFiles/pgquarrel.dir/src/matview.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/matview.c.o -c /home/vagrant/tmp/pgquarrel-master/src/matview.c [ 52%] Building C object CMakeFiles/pgquarrel.dir/src/operator.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/operator.c.o -c /home/vagrant/tmp/pgquarrel-master/src/operator.c [ 55%] Building C object CMakeFiles/pgquarrel.dir/src/policy.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/policy.c.o -c /home/vagrant/tmp/pgquarrel-master/src/policy.c [ 57%] Building C object CMakeFiles/pgquarrel.dir/src/publication.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/publication.c.o -c /home/vagrant/tmp/pgquarrel-master/src/publication.c [ 60%] Building C object CMakeFiles/pgquarrel.dir/src/privileges.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/privileges.c.o -c /home/vagrant/tmp/pgquarrel-master/src/privileges.c [ 63%] Building C object CMakeFiles/pgquarrel.dir/src/quarrel.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/quarrel.c.o -c /home/vagrant/tmp/pgquarrel-master/src/quarrel.c [ 65%] Building C object CMakeFiles/pgquarrel.dir/src/rule.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/rule.c.o -c /home/vagrant/tmp/pgquarrel-master/src/rule.c [ 68%] Building C object CMakeFiles/pgquarrel.dir/src/schema.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/schema.c.o -c /home/vagrant/tmp/pgquarrel-master/src/schema.c [ 71%] Building C object CMakeFiles/pgquarrel.dir/src/sequence.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/sequence.c.o -c /home/vagrant/tmp/pgquarrel-master/src/sequence.c [ 73%] Building C object CMakeFiles/pgquarrel.dir/src/server.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/server.c.o -c /home/vagrant/tmp/pgquarrel-master/src/server.c [ 76%] Building C object CMakeFiles/pgquarrel.dir/src/statistics.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/statistics.c.o -c /home/vagrant/tmp/pgquarrel-master/src/statistics.c [ 78%] Building C object CMakeFiles/pgquarrel.dir/src/subscription.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/subscription.c.o -c /home/vagrant/tmp/pgquarrel-master/src/subscription.c [ 81%] Building C object CMakeFiles/pgquarrel.dir/src/table.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/table.c.o -c /home/vagrant/tmp/pgquarrel-master/src/table.c [ 84%] Building C object CMakeFiles/pgquarrel.dir/src/textsearch.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/textsearch.c.o -c /home/vagrant/tmp/pgquarrel-master/src/textsearch.c [ 86%] Building C object CMakeFiles/pgquarrel.dir/src/transform.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/transform.c.o -c /home/vagrant/tmp/pgquarrel-master/src/transform.c [ 89%] Building C object CMakeFiles/pgquarrel.dir/src/trigger.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/trigger.c.o -c /home/vagrant/tmp/pgquarrel-master/src/trigger.c [ 92%] Building C object CMakeFiles/pgquarrel.dir/src/type.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/type.c.o -c /home/vagrant/tmp/pgquarrel-master/src/type.c [ 94%] Building C object CMakeFiles/pgquarrel.dir/src/usermapping.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/usermapping.c.o -c /home/vagrant/tmp/pgquarrel-master/src/usermapping.c [ 97%] Building C object CMakeFiles/pgquarrel.dir/src/view.c.o /usr/bin/cc -I/usr/include/postgresql/12/server -I/usr/include/postgresql -I/home/vagrant/tmp/pgquarrel-master/mini -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -o CMakeFiles/pgquarrel.dir/src/view.c.o -c /home/vagrant/tmp/pgquarrel-master/src/view.c [100%] Linking C executable pgquarrel /usr/bin/cmake -E cmake_link_script CMakeFiles/pgquarrel.dir/link.txt --verbose=1 /usr/bin/cc -O0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -rdynamic CMakeFiles/pgquarrel.dir/src/am.c.o CMakeFiles/pgquarrel.dir/src/aggregate.c.o CMakeFiles/pgquarrel.dir/src/cast.c.o CMakeFiles/pgquarrel.dir/src/collation.c.o CMakeFiles/pgquarrel.dir/src/common.c.o CMakeFiles/pgquarrel.dir/src/conversion.c.o CMakeFiles/pgquarrel.dir/src/domain.c.o CMakeFiles/pgquarrel.dir/src/eventtrigger.c.o CMakeFiles/pgquarrel.dir/src/extension.c.o CMakeFiles/pgquarrel.dir/src/fdw.c.o CMakeFiles/pgquarrel.dir/src/function.c.o CMakeFiles/pgquarrel.dir/src/index.c.o CMakeFiles/pgquarrel.dir/src/language.c.o CMakeFiles/pgquarrel.dir/src/matview.c.o CMakeFiles/pgquarrel.dir/src/operator.c.o CMakeFiles/pgquarrel.dir/src/policy.c.o CMakeFiles/pgquarrel.dir/src/publication.c.o CMakeFiles/pgquarrel.dir/src/privileges.c.o CMakeFiles/pgquarrel.dir/src/quarrel.c.o CMakeFiles/pgquarrel.dir/src/rule.c.o CMakeFiles/pgquarrel.dir/src/schema.c.o CMakeFiles/pgquarrel.dir/src/sequence.c.o CMakeFiles/pgquarrel.dir/src/server.c.o CMakeFiles/pgquarrel.dir/src/statistics.c.o CMakeFiles/pgquarrel.dir/src/subscription.c.o CMakeFiles/pgquarrel.dir/src/table.c.o CMakeFiles/pgquarrel.dir/src/textsearch.c.o CMakeFiles/pgquarrel.dir/src/transform.c.o CMakeFiles/pgquarrel.dir/src/trigger.c.o CMakeFiles/pgquarrel.dir/src/type.c.o CMakeFiles/pgquarrel.dir/src/usermapping.c.o CMakeFiles/pgquarrel.dir/src/view.c.o -o pgquarrel -Wl,-rpath,/home/vagrant/tmp/pgquarrel-master/mini: /usr/lib/postgresql/12/lib/libpgport.a /usr/lib/postgresql/12/lib/libpgcommon.a -lpq mini/libmini.so make[2]: Leaving directory '/home/vagrant/tmp/pgquarrel-master' [100%] Built target pgquarrel make[1]: Leaving directory '/home/vagrant/tmp/pgquarrel-master' /usr/bin/cmake -E cmake_progress_start /home/vagrant/tmp/pgquarrel-master/CMakeFiles 0 ```
$ ldd pgquarrel
    linux-vdso.so.1 (0x00007ffdbf5cc000)
    libpq.so.5 => /usr/lib/x86_64-linux-gnu/libpq.so.5 (0x00007f81b217a000)
    libmini.so => /home/vagrant/tmp/pgquarrel-master/mini/libmini.so (0x00007f81b1f76000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f81b1b85000)
    libssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f81b18f8000)
    libcrypto.so.1.1 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007f81b142d000)
    libgssapi_krb5.so.2 => /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007f81b11e2000)
    libldap_r-2.4.so.2 => /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2 (0x00007f81b0f90000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f81b0d71000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f81b2641000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f81b0b6d000)
    libkrb5.so.3 => /usr/lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007f81b0897000)
    libk5crypto.so.3 => /usr/lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007f81b0665000)
    libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007f81b0461000)
    libkrb5support.so.0 => /usr/lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007f81b0256000)
    liblber-2.4.so.2 => /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2 (0x00007f81b0048000)
    libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f81afe2d000)
    libsasl2.so.2 => /usr/lib/x86_64-linux-gnu/libsasl2.so.2 (0x00007f81afc12000)
    libgssapi.so.3 => /usr/lib/x86_64-linux-gnu/libgssapi.so.3 (0x00007f81af9d1000)
    libgnutls.so.30 => /usr/lib/x86_64-linux-gnu/libgnutls.so.30 (0x00007f81af66c000)
    libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007f81af468000)
    libheimntlm.so.0 => /usr/lib/x86_64-linux-gnu/libheimntlm.so.0 (0x00007f81af25f000)
    libkrb5.so.26 => /usr/lib/x86_64-linux-gnu/libkrb5.so.26 (0x00007f81aefd2000)
    libasn1.so.8 => /usr/lib/x86_64-linux-gnu/libasn1.so.8 (0x00007f81aed30000)
    libhcrypto.so.4 => /usr/lib/x86_64-linux-gnu/libhcrypto.so.4 (0x00007f81aeafa000)
    libroken.so.18 => /usr/lib/x86_64-linux-gnu/libroken.so.18 (0x00007f81ae8e4000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f81ae6c7000)
    libp11-kit.so.0 => /usr/lib/x86_64-linux-gnu/libp11-kit.so.0 (0x00007f81ae398000)
    libidn2.so.0 => /usr/lib/x86_64-linux-gnu/libidn2.so.0 (0x00007f81ae17b000)
    libunistring.so.2 => /usr/lib/x86_64-linux-gnu/libunistring.so.2 (0x00007f81addfd000)
    libtasn1.so.6 => /usr/lib/x86_64-linux-gnu/libtasn1.so.6 (0x00007f81adbea000)
    libnettle.so.6 => /usr/lib/x86_64-linux-gnu/libnettle.so.6 (0x00007f81ad9b4000)
    libhogweed.so.4 => /usr/lib/x86_64-linux-gnu/libhogweed.so.4 (0x00007f81ad780000)
    libgmp.so.10 => /usr/lib/x86_64-linux-gnu/libgmp.so.10 (0x00007f81ad4ff000)
    libwind.so.0 => /usr/lib/x86_64-linux-gnu/libwind.so.0 (0x00007f81ad2d6000)
    libheimbase.so.1 => /usr/lib/x86_64-linux-gnu/libheimbase.so.1 (0x00007f81ad0c7000)
    libhx509.so.5 => /usr/lib/x86_64-linux-gnu/libhx509.so.5 (0x00007f81ace7d000)
    libsqlite3.so.0 => /usr/lib/x86_64-linux-gnu/libsqlite3.so.0 (0x00007f81acb74000)
    libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f81ac93c000)
    libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007f81ac734000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f81ac396000)

libmini is resolved correctly here

but

After make install, it's not found => libmini.so => not found:

$ 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
$ cd
$ cd pgquarrel/
$ ls -l
total 8
drwxrwxr-x 2 vagrant vagrant 4096 Mar  7 20:17 bin
drwxrwxr-x 2 vagrant vagrant 4096 Mar  7 20:17 lib
$ cd bin/
$ ls -l
total 708
-rwxr-xr-x 1 vagrant vagrant 723320 Mar  7 20:16 pgquarrel
$ ldd pgquarrel
    linux-vdso.so.1 (0x00007fff3f883000)
    libpq.so.5 => /usr/lib/x86_64-linux-gnu/libpq.so.5 (0x00007f29ac8c1000)
    libmini.so => not found
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f29ac4d0000)
    libssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f29ac243000)
    libcrypto.so.1.1 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007f29abd78000)
    libgssapi_krb5.so.2 => /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007f29abb2d000)
    libldap_r-2.4.so.2 => /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2 (0x00007f29ab8db000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f29ab6bc000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f29acd88000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f29ab4b8000)
    libkrb5.so.3 => /usr/lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007f29ab1e2000)
    libk5crypto.so.3 => /usr/lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007f29aafb0000)
    libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007f29aadac000)
    libkrb5support.so.0 => /usr/lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007f29aaba1000)
    liblber-2.4.so.2 => /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2 (0x00007f29aa993000)
    libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f29aa778000)
    libsasl2.so.2 => /usr/lib/x86_64-linux-gnu/libsasl2.so.2 (0x00007f29aa55d000)
    libgssapi.so.3 => /usr/lib/x86_64-linux-gnu/libgssapi.so.3 (0x00007f29aa31c000)
    libgnutls.so.30 => /usr/lib/x86_64-linux-gnu/libgnutls.so.30 (0x00007f29a9fb7000)
    libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007f29a9db3000)
    libheimntlm.so.0 => /usr/lib/x86_64-linux-gnu/libheimntlm.so.0 (0x00007f29a9baa000)
    libkrb5.so.26 => /usr/lib/x86_64-linux-gnu/libkrb5.so.26 (0x00007f29a991d000)
    libasn1.so.8 => /usr/lib/x86_64-linux-gnu/libasn1.so.8 (0x00007f29a967b000)
    libhcrypto.so.4 => /usr/lib/x86_64-linux-gnu/libhcrypto.so.4 (0x00007f29a9445000)
    libroken.so.18 => /usr/lib/x86_64-linux-gnu/libroken.so.18 (0x00007f29a922f000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f29a9012000)
    libp11-kit.so.0 => /usr/lib/x86_64-linux-gnu/libp11-kit.so.0 (0x00007f29a8ce3000)
    libidn2.so.0 => /usr/lib/x86_64-linux-gnu/libidn2.so.0 (0x00007f29a8ac6000)
    libunistring.so.2 => /usr/lib/x86_64-linux-gnu/libunistring.so.2 (0x00007f29a8748000)
    libtasn1.so.6 => /usr/lib/x86_64-linux-gnu/libtasn1.so.6 (0x00007f29a8535000)
    libnettle.so.6 => /usr/lib/x86_64-linux-gnu/libnettle.so.6 (0x00007f29a82ff000)
    libhogweed.so.4 => /usr/lib/x86_64-linux-gnu/libhogweed.so.4 (0x00007f29a80cb000)
    libgmp.so.10 => /usr/lib/x86_64-linux-gnu/libgmp.so.10 (0x00007f29a7e4a000)
    libwind.so.0 => /usr/lib/x86_64-linux-gnu/libwind.so.0 (0x00007f29a7c21000)
    libheimbase.so.1 => /usr/lib/x86_64-linux-gnu/libheimbase.so.1 (0x00007f29a7a12000)
    libhx509.so.5 => /usr/lib/x86_64-linux-gnu/libhx509.so.5 (0x00007f29a77c8000)
    libsqlite3.so.0 => /usr/lib/x86_64-linux-gnu/libsqlite3.so.0 (0x00007f29a74bf000)
    libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f29a7287000)
    libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007f29a707f000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f29a6ce1000)

Thanks

eulerto commented 4 years ago

-- Set runtime path of "/home/vagrant/pgquarrel/bin/pgquarrel" to ""

CMake was not setting rpath. I fixed it in commit 010444b70b58d19581c243598584663bcfca9afa. Could you test again?

mfn commented 4 years ago

Works like a charm now, thank you!

$ pwd
/home/vagrant/pgquarrel/bin
$ ldd pgquarrel
    linux-vdso.so.1 (0x00007ffdd49b2000)
    libpq.so.5 => /usr/lib/x86_64-linux-gnu/libpq.so.5 (0x00007fe105030000)
    libmini.so => /home/vagrant/pgquarrel/lib/libmini.so (0x00007fe104e2c000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe104a3b000)
    libssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007fe1047ae000)
    libcrypto.so.1.1 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007fe1042e3000)
    libgssapi_krb5.so.2 => /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007fe104098000)
    libldap_r-2.4.so.2 => /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2 (0x00007fe103e46000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fe103c27000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fe1054f7000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fe103a23000)
    libkrb5.so.3 => /usr/lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007fe10374d000)
    libk5crypto.so.3 => /usr/lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007fe10351b000)
    libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007fe103317000)
    libkrb5support.so.0 => /usr/lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007fe10310c000)
    liblber-2.4.so.2 => /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2 (0x00007fe102efe000)
    libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007fe102ce3000)
    libsasl2.so.2 => /usr/lib/x86_64-linux-gnu/libsasl2.so.2 (0x00007fe102ac8000)
    libgssapi.so.3 => /usr/lib/x86_64-linux-gnu/libgssapi.so.3 (0x00007fe102887000)
    libgnutls.so.30 => /usr/lib/x86_64-linux-gnu/libgnutls.so.30 (0x00007fe102522000)
    libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007fe10231e000)
    libheimntlm.so.0 => /usr/lib/x86_64-linux-gnu/libheimntlm.so.0 (0x00007fe102115000)
    libkrb5.so.26 => /usr/lib/x86_64-linux-gnu/libkrb5.so.26 (0x00007fe101e88000)
    libasn1.so.8 => /usr/lib/x86_64-linux-gnu/libasn1.so.8 (0x00007fe101be6000)
    libhcrypto.so.4 => /usr/lib/x86_64-linux-gnu/libhcrypto.so.4 (0x00007fe1019b0000)
    libroken.so.18 => /usr/lib/x86_64-linux-gnu/libroken.so.18 (0x00007fe10179a000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fe10157d000)
    libp11-kit.so.0 => /usr/lib/x86_64-linux-gnu/libp11-kit.so.0 (0x00007fe10124e000)
    libidn2.so.0 => /usr/lib/x86_64-linux-gnu/libidn2.so.0 (0x00007fe101031000)
    libunistring.so.2 => /usr/lib/x86_64-linux-gnu/libunistring.so.2 (0x00007fe100cb3000)
    libtasn1.so.6 => /usr/lib/x86_64-linux-gnu/libtasn1.so.6 (0x00007fe100aa0000)
    libnettle.so.6 => /usr/lib/x86_64-linux-gnu/libnettle.so.6 (0x00007fe10086a000)
    libhogweed.so.4 => /usr/lib/x86_64-linux-gnu/libhogweed.so.4 (0x00007fe100636000)
    libgmp.so.10 => /usr/lib/x86_64-linux-gnu/libgmp.so.10 (0x00007fe1003b5000)
    libwind.so.0 => /usr/lib/x86_64-linux-gnu/libwind.so.0 (0x00007fe10018c000)
    libheimbase.so.1 => /usr/lib/x86_64-linux-gnu/libheimbase.so.1 (0x00007fe0fff7d000)
    libhx509.so.5 => /usr/lib/x86_64-linux-gnu/libhx509.so.5 (0x00007fe0ffd33000)
    libsqlite3.so.0 => /usr/lib/x86_64-linux-gnu/libsqlite3.so.0 (0x00007fe0ffa2a000)
    libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007fe0ff7f2000)
    libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007fe0ff5ea000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fe0ff24c000)