Makefile.am                     |   3 ++-
 README                          |  12 ++++++++++--
 opensaf.spec.in                 |   2 +-
 samples/Makefile.common         |   1 +
 src/base/Makefile.am            |   3 ++-
 tools/cluster_sim_uml/build_uml |   4 ++--
 6 files changed, 18 insertions(+), 7 deletions(-)


An application binary linked with the OpenSAF AIS libraries may fail to load
after upgrading to OpenSAF 5.2. The reason is that libopensaf_core.so.0 has
moved from /usr/local/lib to /usr/local/lib/opensaf. This problem can happen if
the following two conditions are met:

* The application was linked without using the -Wl,--as-needed option (and this
  option is not enabled by default by the Linux distribution used when building
  the application binary)
* The directory /usr/local/lib/opensaf is not listed in LD_LIBRARY_PATH or
  /etc/ld.so.conf

This is fixed by:

* Moving libopensaf_core back to /usr/local/lib
* Updating the documentation to mention that -Wl,--as-needed must to be used
  when linking with the OpenSAF libraries, to avoid similar problems in the
  future.

diff --git a/Makefile.am b/Makefile.am
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,6 +1,7 @@
 #      -*- OpenSAF  -*-
 #
 # (C) Copyright 2008 The OpenSAF Foundation
+# Copyright Ericsson AB 2009, 2017 - All Rights Reserved.
 #
 # This program is distributed in the hope that it will be useful, but
 # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
@@ -54,7 +55,7 @@ AM_CPPFLAGS = \
 
 AM_CFLAGS = -pipe -std=gnu11 @OSAF_HARDEN_FLAGS@ -Wall -Wformat=2 -Werror
 AM_CXXFLAGS = -pipe -std=gnu++11 @OSAF_HARDEN_FLAGS@ -Wall -Wformat=2 -Werror
-AM_LDFLAGS = @OSAF_HARDEN_FLAGS@ -ldl -lrt -pthread -rdynamic
+AM_LDFLAGS = @OSAF_HARDEN_FLAGS@ -Wl,--as-needed -ldl -lrt -pthread -rdynamic
 ACLOCAL_AMFLAGS = -I m4
 OSAF_LIB_FLAGS =
 
diff --git a/README b/README
--- a/README
+++ b/README
@@ -824,6 +824,7 @@ installed with the other system `*.pc' f
 There are two easy ways to use `pkgconfig'. The first one is to call it 
directly
 from a `Makefile' and assign its content to make variables e.g.:
 
+   AMF_LDFLAGS=-Wl,--as-needed
    AMF_LIBS=`pkg-config opensaf-amf --libs`
    AMF_CFLAGS=`pkg-config opensaf-amf --cflags`
 
@@ -837,8 +838,15 @@ It will then provides two special variab
 
    -- in Makefile.am --
    mumble_CFLAGS = @AMF_CFLAGS@
+   mumble_LDFLAGS = -Wl,--as-needed
    mumble_LDADD = @AMF_LIBS@
 
+The --as-needed ld flag is enabled by default on many modern Linux
+distributions, but just to be on the safe side please make sure to add
+-Wl,--as-needed to your LDFLAGS when linking application programs with the
+OpenSAF AIS libraries. Otherwise the resulting binary may not be compatible 
with
+other versions of OpenSAF.
+
 
 How to Configure `OpenSAF'
 ==========================
@@ -918,13 +926,13 @@ The `Makefile' looks for installed `SAF 
 standard system wide locations (e.g. /usr/include/ & /usr/lib/):
 
     INCLUDES = -I.
-    LDFLAGS = -lSaAmf
+    LDFLAGS = -Wl,--as-needed -lSaAmf
 
 If you have `OpenSAF' development packages installed somewhere else, override
 the default values e.g.:
 
     % make INCLUDES="-I. -I/tmp/usr/local/include" \
-        LDFLAGS="-L/tmp/usr/local/lib -lSaAmf -lopensaf_core"
+        LDFLAGS="-Wl,--as-needed -L/tmp/usr/local/lib -lSaAmf -lopensaf_core"
 
 To run an application you will need a configured `OpenSAF' node running.
 
diff --git a/opensaf.spec.in b/opensaf.spec.in
--- a/opensaf.spec.in
+++ b/opensaf.spec.in
@@ -1427,7 +1427,7 @@ fi
 %files libs
 %defattr(-,root,root)
 %dir %{_pkglibdir}
-%{_pkglibdir}/libopensaf_core.so.*
+%{_libdir}/libopensaf_core.so.*
 %{_pkglibdir}/libosaf_common.so.*
 
 %files tools
diff --git a/samples/Makefile.common b/samples/Makefile.common
--- a/samples/Makefile.common
+++ b/samples/Makefile.common
@@ -1,5 +1,6 @@
 AM_CPPFLAGS = $(all_includes)
 AM_CFLAGS = -fPIC -Wall
+AM_LDFLAGS = -Wl,--as-needed
 #AM_CFLAGS = -fPIC -Wall -Werror
 
 lsbinitdir = $(initscriptdir)
diff --git a/src/base/Makefile.am b/src/base/Makefile.am
--- a/src/base/Makefile.am
+++ b/src/base/Makefile.am
@@ -1,6 +1,7 @@
 #      -*- OpenSAF  -*-
 #
 # (C) Copyright 2016 The OpenSAF Foundation
+# Copyright Ericsson AB 2017 - All Rights Reserved.
 #
 # This program is distributed in the hope that it will be useful, but
 # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
@@ -14,7 +15,7 @@
 # Author(s): Ericsson AB
 #
 
-osaf_lib_LTLIBRARIES += lib/libopensaf_core.la
+lib_LTLIBRARIES += lib/libopensaf_core.la
 
 lib_libopensaf_core_la_CFLAGS = $(OSAF_LIB_FLAGS) -fno-strict-aliasing 
$(AM_CFLAGS)
 
diff --git a/tools/cluster_sim_uml/build_uml b/tools/cluster_sim_uml/build_uml
--- a/tools/cluster_sim_uml/build_uml
+++ b/tools/cluster_sim_uml/build_uml
@@ -84,7 +84,7 @@ cmd_build_testprog() {
        -I$opensaf_home/src/osaf/saf \
        -DSA_EXTENDED_NAME_SOURCE \
        -o $installd/amf_demo $src/amf_demo.c \
-       -L$libd -lSaAmf -lamf_common -L$libd/opensaf -lopensaf_core
+       -Wl,--as-needed "-Wl,-rpath-link,$libd:$libd/opensaf" "-L$libd" -lSaAmf
 
     echo "Creating [$root/root.cpio] ..."
     cmd_mkcpio
@@ -110,7 +110,7 @@ cmd_install_testprog() {
        -I$opensaf_home/src/osaf/saf \
        -DSA_EXTENDED_NAME_SOURCE \
        -o $installd/amf_demo $src/amf_demo.c \
-       -L$libd -lSaAmf -lamf_common -L$libd/opensaf -lopensaf_core
+       -Wl,--as-needed "-Wl,-rpath-link,$libd:$libd/opensaf" "-L$libd" -lSaAmf
 
     test -r $immxml.orig || cp $immxml $immxml.orig
     $opensaf_home/src/imm/tools/immxml-merge \

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to