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