qpid-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Shearer, Davin" <dshea...@novetta.com>
Subject How to build qpid with proton v0.5, boost v1.55.0 statically on fedora19
Date Tue, 14 Jan 2014 20:56:01 GMT
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

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