On Wed, Jul 09, 2014 at 03:00:45PM +0000, Viktor Dukhovni wrote:
> > - $(SHLIB_LD) -o $(LIB) $(OBJS)
> > + $(SHLIB_LD) -o $(LIB) $(OBJS) $(SYSLIBS)
> > ...
>
> In my test on Ralf's system the above fixes the problem. Not
> surprising, since with versioned symbols the shared objects need
> to record the right symbol names at link time.
>
> Shared objects generally need to record their dependencies explicitly,
> rather than attempt to inherit them from the program they are linked
> with.
The complete patch is below my signature. I also noticed that on
Linux systems "-Wl,-rpath,..." sets the RPATH property in the ELF
object, which cannot be preempted via LD_LIBRARY_PATH. This is
deprecated, and one is encourated to use the new RUNPATH property
instead which has lower precedence than LD_LIBRARY_PATH. Since
Postfix uses the build-tree libraries during the build, we need
LD_LIBRARY_PATH to work. Therefore, for Linux 3 systems (likely
more similar systems also need this) I added -Wl,--enable-new-dtags
to SHLIB_LD.
Anyone know which version of the toolchain introduces --enable-new-dtags?
--
Viktor.
diff -ru postfix-2.12-20140703/makedefs postfix-2.12-20140703.new/makedefs
--- postfix-2.12-20140703/makedefs 2014-07-01 23:37:17.000000000 +0200
+++ postfix-2.12-20140703.new/makedefs 2014-07-09 17:30:55.068379514 +0200
@@ -464,7 +464,7 @@
: ${SHLIB_SUFFIX=.so}
: ${SHLIB_CFLAGS=-fPIC}
: ${SHLIB_LD='gcc -shared -Wl,-soname,${LIB}'}
- : ${SHLIB_RPATH='-Wl,-rpath,${SHLIB_DIR}'}
+ : ${SHLIB_RPATH='-Wl,--enable-new-dtags
-Wl,-rpath,${SHLIB_DIR}'}
: ${SHLIB_ENV="LD_LIBRARY_PATH=`pwd`/lib"}
: ${PLUGIN_LD='gcc -shared'}
;;
diff -ru postfix-2.12-20140703/src/dns/Makefile.in
postfix-2.12-20140703.new/src/dns/Makefile.in
--- postfix-2.12-20140703/src/dns/Makefile.in 2014-04-18 22:22:33.000000000
+0200
+++ postfix-2.12-20140703.new/src/dns/Makefile.in 2014-07-09
17:04:47.203895745 +0200
@@ -33,7 +33,7 @@
$(LIB): $(OBJS)
$(AR) $(ARFL) $(LIB) $?
$(RANLIB) $(LIB)
- $(SHLIB_LD) -o $(LIB) $(OBJS)
+ $(SHLIB_LD) -o $(LIB) $(OBJS) $(SYSLIBS)
$(LIB_DIR)/$(LIB): $(LIB)
cp $(LIB) $(LIB_DIR)
diff -ru postfix-2.12-20140703/src/global/Makefile.in
postfix-2.12-20140703.new/src/global/Makefile.in
--- postfix-2.12-20140703/src/global/Makefile.in 2014-06-22
03:03:52.000000000 +0200
+++ postfix-2.12-20140703.new/src/global/Makefile.in 2014-07-09
17:04:54.496028425 +0200
@@ -138,7 +138,7 @@
$(LIB): $(OBJS)
$(AR) $(ARFL) $(LIB) $?
$(RANLIB) $(LIB)
- $(SHLIB_LD) -o $(LIB) $(OBJS)
+ $(SHLIB_LD) -o $(LIB) $(OBJS) $(SYSLIBS)
$(LIB_DIR)/$(LIB): $(LIB)
cp $(LIB) $(LIB_DIR)
diff -ru postfix-2.12-20140703/src/master/Makefile.in
postfix-2.12-20140703.new/src/master/Makefile.in
--- postfix-2.12-20140703/src/master/Makefile.in 2014-05-24
03:16:32.000000000 +0200
+++ postfix-2.12-20140703.new/src/master/Makefile.in 2014-07-09
17:04:59.584121001 +0200
@@ -44,7 +44,7 @@
$(LIB): $(LIB_OBJ)
$(AR) $(ARFL) $(LIB) $?
$(RANLIB) $(LIB)
- $(SHLIB_LD) -o $(LIB) $(LIB_OBJ)
+ $(SHLIB_LD) -o $(LIB) $(LIB_OBJ) $(SYSLIBS)
$(LIB_DIR)/$(LIB): $(LIB)
cp $(LIB) $(LIB_DIR)/$(LIB)
diff -ru postfix-2.12-20140703/src/tls/Makefile.in
postfix-2.12-20140703.new/src/tls/Makefile.in
--- postfix-2.12-20140703/src/tls/Makefile.in 2014-04-18 16:08:22.000000000
+0200
+++ postfix-2.12-20140703.new/src/tls/Makefile.in 2014-07-09
17:05:11.908345231 +0200
@@ -44,7 +44,7 @@
$(LIB): $(OBJS)
$(AR) $(ARFL) $(LIB) $?
$(RANLIB) $(LIB)
- $(SHLIB_LD) -o $(LIB) $(OBJS)
+ $(SHLIB_LD) -o $(LIB) $(OBJS) $(SYSLIBS)
$(LIB_DIR)/$(LIB): $(LIB)
cp $(LIB) $(LIB_DIR)
diff -ru postfix-2.12-20140703/src/util/Makefile.in
postfix-2.12-20140703.new/src/util/Makefile.in
--- postfix-2.12-20140703/src/util/Makefile.in 2014-06-22 03:03:36.000000000
+0200
+++ postfix-2.12-20140703.new/src/util/Makefile.in 2014-07-09
17:05:20.108494423 +0200
@@ -143,7 +143,7 @@
$(LIB): $(OBJS)
$(AR) $(ARFL) $(LIB) $?
$(RANLIB) $(LIB)
- $(SHLIB_LD) -o $(LIB) $(OBJS)
+ $(SHLIB_LD) -o $(LIB) $(OBJS) $(SYSLIBS)
$(LIB_DIR)/$(LIB): $(LIB)
cp $(LIB) $(LIB_DIR)