qpid-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Shearer, Davin" <dshea...@novetta.com>
Subject Re: How to build qpid with proton v0.5, boost v1.55.0 statically on fedora19
Date Tue, 14 Jan 2014 21:48:21 GMT
Hi Robbie,

Thanks for the quick response (I love the responsiveness of this group).
AFAIK, proton is good to go.  This appears to be a problem with the qpid
build scripts not using pkg-config correctly (or my insufficient
cmake-fu?!).  It looks to me like it's using pkg-config --libs-only-l,
which does indeed emit:

$ pkg-config --libs-only-l libqpid-proton
-lqpid-proton -lssl -lcrypto -luuid

Which is what we see in the linker invocation, when it should be using:

$ pkg-config --libs libqpid-proton
-L/home/davin/external/proton-5.0/lib64 -lqpid-proton -lssl -lcrypto -luuid

Hope it helps.

On Tue, Jan 14, 2014 at 4:30 PM, Robbie Gemmell <robbie.gemmell@gmail.com>wrote:

> Hi Davin,
>
> I am completely the wrong person to answer your actual question I'm afraid,
> but just to say...
>
> The vote to release RC3 as Proton 0.6 passed earlier today, so if you
> wanted to try with that before it is properly distributed you can currently
> find it here: http://people.apache.org/~rhs/qpid-proton-0.6rc3/
>
> Hopefully someone who can actually help will be along next...
>
> Robbie
>
> On 14 January 2014 20:56, Shearer, Davin <dshearer@novetta.com> wrote:
>
> > Want to create all libraries statically and boost statically, so updated
> > the CMakeLists.txt to make that happen (I'm not an expert on cmake, so
> let
> > me know if this is the wrong way to build static libraries):
> >
> > -----
> > diff --git a/qpid/cpp/src/CMakeLists.txt b/qpid/cpp/src/CMakeLists.txt
> > index c77b753..22f72f0 100644
> > --- a/qpid/cpp/src/CMakeLists.txt
> > +++ b/qpid/cpp/src/CMakeLists.txt
> > @@ -306,7 +306,7 @@ endif (BUILD_TESTING)
> >  # Boost on Windows can use automatic linking to pick up the correct
> >  # Boost libs based on compile-time touching of the headers. Since we
> don't
> >  # really need to add them to the link lines, set the names to blanks.
> > -option(QPID_LINK_BOOST_DYNAMIC "Link with dynamic Boost libs (OFF to
> link
> > static)" ON)
> > +option(QPID_LINK_BOOST_DYNAMIC "Link with dynamic Boost libs (OFF to
> link
> > static)" OFF)
> >  mark_as_advanced(QPID_LINK_BOOST_DYNAMIC)
> >
> >  if (MSVC)
> > @@ -912,7 +912,7 @@ set (qpidcommon_SOURCES
> >  )
> >  add_msvc_version (qpidcommon library dll)
> >
> > -add_library (qpidcommon SHARED ${qpidcommon_SOURCES})
> > +add_library (qpidcommon STATIC ${qpidcommon_SOURCES})
> >
> >  target_link_libraries (qpidcommon qpidtypes
> >                         ${qpidcommon_platform_LIBS}
> > @@ -943,7 +943,7 @@ set_source_files_properties(
> >       COMPILE_FLAGS "${HIDE_SYMBOL_FLAGS}")
> >
> >  add_msvc_version (qpidtypes library dll)
> > -add_library(qpidtypes SHARED ${qpidtypes_SOURCES})
> > +add_library(qpidtypes STATIC ${qpidtypes_SOURCES})
> >  target_link_libraries(qpidtypes ${qpidtypes_platform_LIBS})
> >  set_target_properties (qpidtypes PROPERTIES
> >                         LINK_FLAGS "${HIDE_SYMBOL_FLAGS}
> > ${LINK_VERSION_SCRIPT_FLAG}"
> > @@ -999,7 +999,7 @@ set (qpidclient_SOURCES
> >  )
> >  add_msvc_version (qpidclient library dll)
> >
> > -add_library (qpidclient SHARED ${qpidclient_SOURCES})
> > +add_library (qpidclient STATIC ${qpidclient_SOURCES})
> >
> >  target_link_libraries (qpidclient qpidcommon
> >                         ${Boost_PROGRAM_OPTIONS_LIBRARY}
> > @@ -1070,7 +1070,7 @@ set (qpidmessaging_SOURCES
> >
> >  add_msvc_version (qpidmessaging library dll)
> >
> > -add_library (qpidmessaging SHARED ${qpidmessaging_SOURCES})
> > +add_library (qpidmessaging STATIC ${qpidmessaging_SOURCES})
> >  target_link_libraries (qpidmessaging qpidtypes qpidclient qpidcommon
> > "${Boost_PROGRAM_OPTIONS_LIBRARY}" ${PROTON_LIB
> >  set_target_properties (qpidmessaging PROPERTIES
> >                         LINK_FLAGS "${HIDE_SYMBOL_FLAGS}
> > ${LINK_VERSION_SCRIPT_FLAG}"
> > @@ -1092,7 +1092,7 @@ if (MSVC)
> >      set(qpidxarm_SOURCES
> > ${AMQP_WCF_DIR}/src/Apache/Qpid/DtcPlugin/DtcPlugin.cpp)
> >      if (EXISTS ${qpidxarm_SOURCES})
> >          add_msvc_version (qpidxarm library dll)
> > -        add_library (qpidxarm SHARED ${qpidxarm_SOURCES})
> > +        add_library (qpidxarm STATIC ${qpidxarm_SOURCES})
> >          target_link_libraries (qpidxarm qpidclient qpidcommon)
> >          install (TARGETS qpidxarm
> >                   RUNTIME DESTINATION ${QPID_INSTALL_BINDIR}
> > @@ -1203,7 +1203,7 @@ set (qpidbroker_SOURCES
> >       qpid/sys/TCPIOPlugin.cpp
> >  )
> >  add_msvc_version (qpidbroker library dll)
> > -add_library (qpidbroker SHARED ${qpidbroker_SOURCES})
> > +add_library (qpidbroker STATIC ${qpidbroker_SOURCES})
> >
> >  target_link_libraries (qpidbroker qpidcommon qpidtypes
> >                         "${Boost_PROGRAM_OPTIONS_LIBRARY}"
> > @@ -1322,7 +1322,7 @@ endif (NOT WIN32)
> >          )
> >
> >      add_msvc_version (qmf2 library dll)
> > -    add_library (qmf2 SHARED ${qmf2_SOURCES})
> > +    add_library (qmf2 STATIC ${qmf2_SOURCES})
> >      target_link_libraries (qmf2 qpidmessaging qpidtypes qpidclient
> > qpidcommon)
> >      set_target_properties (qmf2 PROPERTIES
> >                             VERSION ${qmf2_version}
> > -----
> >
> > Want to link proton 0.50 static library
> > (/home/davin/external/proton-0.5/lib64/libqpid-proton.a):
> >
> > $ export
> >
> PKG_CONFIG_PATH=$HOME/external/proton-0.5/lib64/pkgconfig:$PKG_CONFIG_PATH
> > $ pkg-config --cflags libqpid-proton
> > -I/home/davin/external/proton-0.5/include -I/usr/include/uuid
> > $ pkg-config --libs libqpid-proton
> > -L/home/davin/external/proton-0.5/lib64 -lqpid-proton -lssl -lcrypto
> -luuid
> >
> > Want to link PIC, link boost v1.55.0 static libraries and enable AMQP 1.0
> > (via proton):
> >
> > $ rm -rf build-cpp
> > $ mkdir build-cpp
> > $ cd build-cpp
> > $ cmake \
> >   -DBoost_LIBRARY_DIR:PATH="/home/davin/external/boost-1.55.0/boost/lib"
> \
> >
> >
> -DBoost_INCLUDE_DIR:PATH="/home/davin/external/boost-1.55.0/boost/include"
> > \
> >   -DCMAKE_CXX_FLAGS:STRING="-Wno-unused-local-typedefs
> > -Wno-ignored-qualifiers -fPIC -DPIC -DQMF_USE_DEPRECATED_API" \
> >   -DBUILD_AMQP:BOOL="1" ../qpid/cpp
> >
> > $ make all && make DESTDIR=$(readlink -e ..)/qpid-install install
> >
> > OS is fedora19, compiler is gcc 4.8.2.  qpid is from SCM (git-svn-id:
> > https://svn.apache.org/repos/asf/qpid/trunk@1558037).  The static boost
> > and
> > proton libraries are all built with -fPIC -DPIC.  gcc 4.8 and boost
> 1.55.0
> > generate many unused local typedef warnings with are suppressed with
> > -Wno-unused-local-typedefs and there is a warning about a qualifier being
> > ignored in boost, so we suppress that also with -Wno-ignored-qualifiers.
> > The QMF build is warning about using a deprecated API, so we suppress
> that
> > with -DPIC -DQMF_USE_DEPRECATED_API.
> >
> > I get this far:
> >
> > [ 78%] Building CXX object src/CMakeFiles/ha.dir/qpid/ha/types.cpp.o
> > [ 78%] Building CXX object
> src/CMakeFiles/ha.dir/qpid/ha/TxReplicator.cpp.o
> > Linking CXX shared module ha.so
> > /usr/bin/ld: cannot find -lqpid-proton
> > collect2: error: ld returned 1 exit status
> > make[2]: *** [src/ha.so] Error 1
> > make[1]: *** [src/CMakeFiles/ha.dir/all] Error 2
> > make: *** [all] Error 2
> >
> > The build of ha.so should be using the LDFLAGS from pkg-config --libs (in
> > this case -L/home/davin/external/proton-0.5/lib64 -lqpid-proton -lssl
> > -lcrypto -luuid), but obviously it is not working correctly.
> >
> > $ ls -l /home/davin/external/proton-0.5/lib64/libqpid-proton.a
> > -rw-r--r-- 1 davin davin 553474 Dec 30 16:47
> > /home/davin/external/proton-0.5/lib64/libqpid-proton.a
> >
> > Are the build scripts not using pkg-config correctly or am I not using
> > cmake correctly?
> >
> > --
> > Davin Shearer
> >
>


-- 
Davin Shearer

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message