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 [ at ] 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?
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 [ at ] 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?