[zeromq-dev] Revisited: Example for building against ZMQ with CMake + UDP Multicast Support
Luca Boccassi
luca.boccassi at gmail.com
Wed Sep 26 19:41:43 CEST 2018
The dependencies are added on OBS only when missing in the base system.
As far as I'm aware RHEL was missing sodium, or at least it was the
last time I checked. If that's not the case then just report it and we
can remove the downstream build.
It's fine to have a corner case like yours, with specific needs. But
it's a corner case - in the general case, like this thread, using the
repositories is the preferred form of distribution (after using what's
in the native distro ofc). Simply because having to manually build
things is time consuming and error prone - which means more ticket get
opened in case users are not 100% familiar with autotools/cmake, which
means more time spent by maintainers.
When talking about the average case, knowledge about adding third party
repositories to a distro install is much more common than building from
scratch N elements of a stack.
On Wed, 2018-09-26 at 11:58 -0400, Bill Torpey wrote:
> Hi Luca:
>
> The problem, for me at least, is that some of the library versions
> required by the packaged ZeroMQ are not native for the target OS.
>
> For instance, the 4.2.5 distro for RH6 requires libsodium.so.18,
> while the native version on RH6 is libsodium.so.4. A similar
> situation exists with openpgm, and to make things worse I don’t need
> or want either of these on my production servers.
>
> The policy in my shop is to avoid franken-OS’s at all costs — we do
> not install *anything* that is not included as part of the base OS in
> standard locations (e.g., /usr). Anything of that sort that *does*
> need to be installed is *always* built from source using the same
> build/deploy infrastructure we use for our own applications and
> deployed to /opt. That provides a separation between OS and
> application that we require for, among other things, ISO 27001
> certification, which our customers demand. (It also makes the SE’s
> jobs at least tolerable, since they can always re-install the base OS
> “from scratch” without needing to track custom packages/versions).
>
> So I guess my question is whether the newer versions of the dependent
> libs are required for a particular reason? If so, is that reason
> documented somewhere? Because if it is, I need to start building and
> deploying that specific version. If not, then I can stick with using
> the native version supplied by the OS .
>
> Thanks!
>
> Bill
>
>
> > On Sep 26, 2018, at 11:36 AM, Luca Boccassi <luca.boccassi at gmail.co
> > m> wrote:
> >
> > In case the base system is missing a dependency, everything that is
> > needed is shipped in the same repository where the library can be
> > found, and kept up to date.
> > Please do not recommend to avoid repositories - it's the preferred
> > form
> > of distribution for Linux users.
> >
> > On Wed, 2018-09-26 at 11:22 -0400, Bill Torpey wrote:
> > > So I guess you could use the static lib, but that may not be
> > > ideal.
> > >
> > > Personally I’ve had problems with the packaged builds — e.g., the
> > > RH
> > > builds require specific versions of dependent libs that are not
> > > native to the OS. For that reason, among others, I build libzmq
> > > from
> > > source. That’s not easy either, but at least you know what
> > > you’re
> > > getting.
> > >
> > > FWIW, here’s a snip from the build script that I use — you will
> > > obviously need to make changes for your environment, but it’s a
> > > start.
> > >
> > > # delete old build
> > > rm -rf build
> > > mkdir build
> > > cd build
> > >
> > > # do the build
> > > cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX}
> > > -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} \
> > > -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
> > > -DENABLE_DRAFTS=On \
> > > -DBUILD_STATIC=Off \
> > > -DWITH_OPENPGM=Off \
> > > ..
> > > rc=$?
> > > [[ $rc != 0 ]] && exit $rc
> > >
> > > make ${VERBOSE} && make ${VERBOSE} install
> > > rc=$?
> > > [[ $rc != 0 ]] && exit $rc
> > >
> > >
> > > # copy source to facilitate debugging
> > > mkdir -p ${INSTALL_PREFIX}/src
> > > cp -rp ../src ${INSTALL_PREFIX}/
> > >
> > >
> > > > On Sep 26, 2018, at 11:10 AM, Stephan again <opfer at vs.uni-kasse
> > > > l.de
> > > > > wrote:
> > > >
> > > > And the static library installed from this repository seems to
> > > > have
> > > > the draft api included. Here is the test for that:
> > > > nm -gC /usr/lib/x86_64-linux-gnu/libzmq.a | grep zmq_msg_group
> > > >
> > > > nm: src_libzmq_la-devpoll.o: no symbols
> > > > nm: src_libzmq_la-gssapi_mechanism_base.o: no symbols
> > > > nm: src_libzmq_la-gssapi_client.o: no symbols
> > > > nm: src_libzmq_la-gssapi_server.o: no symbols
> > > > nm: src_libzmq_la-kqueue.o: no symbols
> > > > nm: src_libzmq_la-poll.o: no symbols
> > > > nm: src_libzmq_la-pollset.o: no symbols
> > > > nm: src_libzmq_la-precompiled.o: no symbols
> > > > nm: src_libzmq_la-select.o: no symbols
> > > > nm: src_libzmq_la-vmci.o: no symbols
> > > > nm: src_libzmq_la-vmci_address.o: no symbols
> > > > nm: src_libzmq_la-vmci_connecter.o: no symbols
> > > > nm: src_libzmq_la-vmci_listener.o: no symbols
> > > > 0000000000000fb0 T zmq_msg_group(zmq_msg_t*) <- matched
> > > >
> > > > Kind Regards
> > > >
> > > > Stephan
> > > >
> > > > On 26.09.2018 17:05, Stephan again wrote:
> > > > > I Installed it from:
> > > > >
> > > > > http://download.opensuse.org/repositories/network:/messaging:
> > > > > /zer
> > > > > omq:/release-draft/xUbuntu_18.04/
> > > > > <http://download.opensuse.org/repositories/network:/messaging
> > > > > :/ze
> > > > > <http://download.opensuse.org/repositories/network:/messaging
> > > > > :/ze>
> > > > > romq:/release-draft/xUbuntu_18.04/>
> > > > > Hoping that it was compiled accordingly...
> > > > >
> > > > > This:
> > > > > g++ Discovery.cpp /usr/lib/x86_64-linux-gnu/libzmq.a
> > > > > -lpthread
> > > > > -DZMQ_BUILD_DRAFT_API=1 -DENABLE_DRAFTS=On -o test
> > > > >
> > > > > makes it even worth:
> > > > >
> > > > > /usr/lib/x86_64-linux-gnu/libzmq.a(src_libzmq_la-
> > > > > socket_base.o):
> > > > > In function `zmq::socket_base_t::connect(char const*)':
> > > > > (.text+0x4b26): undefined reference to `pgm_freeaddrinfo'
> > > > > /tmp/cc62suQj.o: In function `msg_send(zmq_msg_t*, void*,
> > > > > char
> > > > > const*, char const*)':
> > > > > Discovery.cpp:(.text+0x8e): undefined reference to
> > > > > `zmq_msg_set_group'
> > > > > /tmp/cc62suQj.o: In function `msg_recv_cmp(zmq_msg_t*, void*,
> > > > > char const*, char const*)':
> > > > > Discovery.cpp:(.text+0x148): undefined reference to
> > > > > `zmq_msg_group'
> > > > > /tmp/cc62suQj.o: In function `main':
> > > > > Discovery.cpp:(.text+0x30e): undefined reference to
> > > > > `zmq_leave'
> > > > > Discovery.cpp:(.text+0x37f): undefined reference to
> > > > > `zmq_join'
> > > > > Discovery.cpp:(.text+0x3c3): undefined reference to
> > > > > `zmq_join'
> > > > > Discovery.cpp:(.text+0x407): undefined reference to
> > > > > `zmq_join'
> > > > > Discovery.cpp:(.text+0x57c): undefined reference to
> > > > > `zmq_join'
> > > > > Discovery.cpp:(.text+0x668): undefined reference to
> > > > > `zmq_leave'
> > > > > /usr/lib/x86_64-linux-gnu/libzmq.a(src_libzmq_la-
> > > > > zmq_utils.o): In
> > > > > function `zmq_curve_keypair':
> > > > > (.text+0x3e6): undefined reference to `crypto_box_keypair'
> > > > > /usr/lib/x86_64-linux-gnu/libzmq.a(src_libzmq_la-
> > > > > zmq_utils.o): In
> > > > > function `zmq_curve_public':
> > > > > (.text+0x482): undefined reference to
> > > > > `crypto_scalarmult_base'
> > > > > /usr/lib/x86_64-linux-gnu/libzmq.a(src_libzmq_la-ip.o): In
> > > > > function `zmq::initialize_network()':
> > > > > (.text+0x480): undefined reference to `pgm_init'
> > > > > (.text+0x511): undefined reference to `pgm_error_free'
> > > > > /usr/lib/x86_64-linux-gnu/libzmq.a(src_libzmq_la-ip.o): In
> > > > > function `zmq::shutdown_network()':
> > > > > (.text+0x585): undefined reference to `pgm_shutdown'
> > > > > /usr/lib/x86_64-linux-gnu/libzmq.a(src_libzmq_la-random.o):
> > > > > In
> > > > > function `zmq::random_open()':
> > > > > (.text+0x95): undefined reference to `sodium_init'
> > > > > /usr/lib/x86_64-linux-gnu/libzmq.a(src_libzmq_la-random.o):
> > > > > In
> > > > > function `zmq::random_close()':
> > > > > (.text+0xc1): undefined reference to `randombytes_close'
> > > > > /usr/lib/x86_64-linux-gnu/libzmq.a(src_libzmq_la-
> > > > > pgm_socket.o):
> > > > > In function `zmq::pgm_socket_t::init_address(char const*,
> > > > > pgm_addrinfo_t**, unsigned short*)':
> > > > > (.text+0x17e): undefined reference to `pgm_getaddrinfo'
> > > > > (.text+0x26f): undefined reference to `pgm_error_free'
> > > > >
> > > > > ....
> > > > >
> > > > > Kind Regards
> > > > >
> > > > > Stephan
> > > > >
> > > > >
> > > > > On 26.09.2018 16:55, Jake wrote:
> > > > > > ZeroMQ itself needs to be compiled with ENABLE_DRAFTS in
> > > > > > CMake. You've added it to the compiler flags when building
> > > > > > your own application. Did you compile ZeroMQ yourself or
> > > > > > are
> > > > > > you using a distro-provided version?
> > > > > >
> > > > > > For the static library, one way is to give the full path to
> > > > > > the
> > > > > > .a file instead of using -lzmq. gcc default behavior
> > > > > > prefers
> > > > > > the shared object when both are present.
> > > > > >
> > > > > > -Jake
> > > > > >
> > > > > >
> > > > > > On Wed, Sep 26, 2018 at 10:51 AM Stephan again <opfer at vs.un
> > > > > > i <mailto:opfer at vs.uni>-ka
> > > > > > ssel.de <http://ssel.de/> <mailto:opfer at vs.uni-kassel.de
> > > > > > <mailto:opfer at vs.uni-kassel.de>>> wrote:
> > > > > > Hi Bill,
> > > > > >
> > > > > > adding -DENABLE_DRAFTS=On does not help:
> > > > > >
> > > > > > g++ Discovery.cpp -lzmq -DZMQ_BUILD_DRAFT_API=1
> > > > > > -DENABLE_DRAFTS=On -o test
> > > > > >
> > > > > > I also checked my installed libraries with "nm -gC <library
> > > > > > |
> > > > > > grep zmq_msgs_group":
> > > > > >
> > > > > > /usr/lib/x86_64-linux-gnu/libzmq.a -> match
> > > > > > /usr/lib/x86_64-linux-gnu/libzmq.so -> no match
> > > > > > /usr/lib/x86_64-linux-gnu/libzmq.so.5 -> no match
> > > > > > /usr/lib/x86_64-linux-gnu/libzmq.so.5.1.5 -> no match
> > > > > >
> > > > > > I am not so into this dynamic and static library stuff, but
> > > > > > my
> > > > > > build chain is linking agains "/usr/lib/x86_64-linux-
> > > > > > gnu/libzmq.so". Is that the problem? How do I force it on
> > > > > > command line to link against the static version.
> > > > > >
> > > > > > Kind Regards
> > > > > >
> > > > > > Stephan
> > > > > >
> > > > > > On 26.09.2018 16:08, Bill Torpey wrote:
> > > > > > > Hi Stephan:
> > > > > > >
> > > > > > > The RADIO/DISH sockets are considered DRAFT, which is
> > > > > > > probably why you’re getting these errors.
> > > > > > >
> > > > > > > There are a couple of possibilities:
> > > > > > >
> > > > > > > - You may be linking against a version of libzmq that
> > > > > > > doesn’t
> > > > > > > include the draft APIs. In order to build with draft
> > > > > > > support, the build needs to specify "-DENABLE_DRAFTS=On”
> > > > > > > on
> > > > > > > the cmake command line. Make sure your libzmq was built
> > > > > > > with
> > > > > > > support for the draft APIs.
> > > > > > >
> > > > > > >
> > > > > > > - You also need to enable draft APIs in your code,
> > > > > > > similar to
> > > > > > > following:
> > > > > > >
> > > > > > > #define ZMQ_BUILD_DRAFT_API
> > > > > > > #include <zmq.h>
> > > > > > >
> > > > > > > The #define makes the draft APIs visible to your code.
> > > > > > >
> > > > > > > (Never mind — you’re already doing this on the compile
> > > > > > > command).
> > > > > > >
> > > > > > > Hope this helps.
> > > > > > >
> > > > > > > Bill
> > > > > > >
> > > > > > > > On Sep 26, 2018, at 9:13 AM, Stephan again <opfer at vs.un
> > > > > > > > i <mailto:opfer at vs.uni>-ka
> > > > > > > > ssel.de <http://ssel.de/> <mailto:opfer at vs.uni-
> > > > > > > > kassel.de <mailto:opfer at vs.uni-kassel.de>>> wrote:
> > > > > > > >
> > > > > > > > Hi,
> > > > > > > >
> > > > > > > > I asked this question/issue one and a half year ago
> > > > > > > > (https:
> > > > > > > > //lists.zeromq.org/mailman/private/zeromq-dev/2017- <ht
> > > > > > > > tp://lists.zeromq.org/mailman/private/zeromq-dev/2017->
> > > > > > > > January/031309.html
> > > > > > > > <https://lists.zeromq.org/mailman/private/zeromq-dev/20
> > > > > > > > 17- <https://lists.zeromq.org/mailman/private/zeromq-
> > > > > > > > dev/2017->
> > > > > > > > January/031309.html>). The difference is that I now
> > > > > > > > would
> > > > > > > > like to use zeromq (draft api) version 4.2.5 under
> > > > > > > > Ubuntu
> > > > > > > > 18.04.
> > > > > > > >
> > > > > > > > My minimal (not) working example can be found here:
> > > > > > > > https:/
> > > > > > > > /gist.github.com/StephanOpfer/5b9f3f76e6610536078cb9c16
> > > > > > > > 072a <http://gist.github.com/StephanOpfer/5b9f3f76e6610
> > > > > > > > 536078cb9c16072a>
> > > > > > > > ac9
> > > > > > > > <https://gist.github.com/StephanOpfer/5b9f3f76e66105360
> > > > > > > > 78cb
> > > > > > > > <https://gist.github.com/StephanOpfer/5b9f3f76e66105360
> > > > > > > > 78cb>
> > > > > > > > 9c16072aac9>
> > > > > > > >
> > > > > > > > Compiling it with this command:
> > > > > > > >
> > > > > > > > g++ Discovery.cpp -lzmq -DZMQ_BUILD_DRAFT_API=1 -o
> > > > > > > > test
> > > > > > > >
> > > > > > > > produces this:
> > > > > > > >
> > > > > > > > /tmp/ccUwelWs.o: In function `msg_send(zmq_msg_t*,
> > > > > > > > void*, char const*, char const*)':
> > > > > > > > Discovery.cpp:(.text+0x8e): undefined reference to
> > > > > > > > `zmq_msg_set_group'
> > > > > > > > /tmp/ccUwelWs.o: In function
> > > > > > > > `msg_recv_cmp(zmq_msg_t*,
> > > > > > > > void*, char const*, char const*)':
> > > > > > > > Discovery.cpp:(.text+0x148): undefined reference to
> > > > > > > > `zmq_msg_group'
> > > > > > > > /tmp/ccUwelWs.o: In function `main':
> > > > > > > > Discovery.cpp:(.text+0x30e): undefined reference to
> > > > > > > > `zmq_leave'
> > > > > > > > Discovery.cpp:(.text+0x37f): undefined reference to
> > > > > > > > `zmq_join'
> > > > > > > > Discovery.cpp:(.text+0x3c3): undefined reference to
> > > > > > > > `zmq_join'
> > > > > > > > Discovery.cpp:(.text+0x407): undefined reference to
> > > > > > > > `zmq_join'
> > > > > > > > Discovery.cpp:(.text+0x57c): undefined reference to
> > > > > > > > `zmq_join'
> > > > > > > > Discovery.cpp:(.text+0x668): undefined reference to
> > > > > > > > `zmq_leave'
> > > > > > > > collect2: error: ld returned 1 exit status
> > > > > > > >
> > > > > > > > Any help is welcome. :)
> > > > > > > >
> > > > > > > > Kind Regards
> > > > > > > >
> > > > > > > > Stephan
> > > > > > > >
> > > > > > > >
> > > > > > > > _______________________________________________
> > > > > > > > zeromq-dev mailing list
> > > > > > > > zeromq-dev at lists.zeromq.org <mailto:zeromq-dev at lists.ze
> > > > > > > > romq.org> <mailto:zeromq-dev at lists.zeromq <mailto:zerom
> > > > > > > > q-dev at lists.zeromq>
> > > > > > > > .org>
> > > > > > > > https://lists.zeromq.org/mailman/listinfo/zeromq-dev
> > > > > > > > <https://lists.zeromq.org/mailman/listinfo/zeromq-dev>
> > > > > > > > <https://lists.zeromq.org/mailman/listinfo/zeromq-dev
> > > > > > > > <https://lists.zeromq.org/mailman/listinfo/zeromq-dev>>
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > _______________________________________________
> > > > > > > zeromq-dev mailing list
> > > > > > > zeromq-dev at lists.zeromq.org <mailto:zeromq-dev at lists.zero
> > > > > > > mq.org> <mailto:zeromq-dev at lists.zeromq.o <mailto:zeromq-
> > > > > > > dev at lists.zeromq.o>
> > > > > > > rg>
> > > > > > > https://lists.zeromq.org/mailman/listinfo/zeromq-dev
> > > > > > > <https://lists.zeromq.org/mailman/listinfo/zeromq-dev>
> > > > > > > <https://lists.zeromq.org/mailman/listinfo/zeromq-dev
> > > > > > > <https://lists.zeromq.org/mailman/listinfo/zeromq-dev>>
> > > > > >
> > > > > > _______________________________________________
> > > > > > zeromq-dev mailing list
> > > > > > zeromq-dev at lists.zeromq.org <mailto:zeromq-dev at lists.zeromq
> > > > > > .org> <mailto:zeromq-dev at lists.zeromq.org <mailto:zeromq-de
> > > > > > v at lists.zeromq.org>
> > > > > > >
> > > > > >
> > > > > > https://lists.zeromq.org/mailman/listinfo/zeromq-dev
> > > > > > <https://lists.zeromq.org/mailman/listinfo/zeromq-dev>
> > > > > > <https://lists.zeromq.org/mailman/listinfo/zeromq-dev
> > > > > > <https://lists.zeromq.org/mailman/listinfo/zeromq-dev>>
> > > > > >
> > > > > >
> > > > > > _______________________________________________
> > > > > > zeromq-dev mailing list
> > > > > > zeromq-dev at lists.zeromq.org <mailto:zeromq-dev at lists.zeromq
> > > > > > .org> <mailto:zeromq-dev at lists.zeromq.org <mailto:zeromq-de
> > > > > > v at lists.zeromq.org>
> > > > > > >
> > > > > >
> > > > > > https://lists.zeromq.org/mailman/listinfo/zeromq-dev
> > > > > > <https://lists.zeromq.org/mailman/listinfo/zeromq-dev>
> > > > > > <https://lists.zeromq.org/mailman/listinfo/zeromq-dev
> > > > > > <https://lists.zeromq.org/mailman/listinfo/zeromq-dev>>
> > > > >
> > > > >
> > > > >
> > > > > _______________________________________________
> > > > > zeromq-dev mailing list
> > > > > zeromq-dev at lists.zeromq.org <mailto:zeromq-dev at lists.zeromq.o
> > > > > rg> <mailto:zeromq-dev at lists.zeromq.org <mailto:zeromq-dev at li
> > > > > sts.zeromq.org>>
> > > > > https://lists.zeromq.org/mailman/listinfo/zeromq-dev
> > > > > <https://lists.zeromq.org/mailman/listinfo/zeromq-dev>
> > > > > <https://lists.zeromq.org/mailman/listinfo/zeromq-dev
> > > > > <https://lists.zeromq.org/mailman/listinfo/zeromq-dev>>
> > > >
> > > > _______________________________________________
> > > > zeromq-dev mailing list
> > > > zeromq-dev at lists.zeromq.org <mailto:zeromq-dev at lists.zeromq.org
> > > > >
> > > > https://lists.zeromq.org/mailman/listinfo/zeromq-dev
> > > > <https://lists.zeromq.org/mailman/listinfo/zeromq-dev>
> > >
> > > _______________________________________________
> > > zeromq-dev mailing list
> > > zeromq-dev at lists.zeromq.org <mailto:zeromq-dev at lists.zeromq.org>
> > > https://lists.zeromq.org/mailman/listinfo/zeromq-dev
> > > <https://lists.zeromq.org/mailman/listinfo/zeromq-dev>
> >
> > --
> > Kind regards,
> > Luca Boccassi_______________________________________________
> > zeromq-dev mailing list
> > zeromq-dev at lists.zeromq.org <mailto:zeromq-dev at lists.zeromq.org>
> > https://lists.zeromq.org/mailman/listinfo/zeromq-dev
> > <https://lists.zeromq.org/mailman/listinfo/zeromq-dev>
>
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> https://lists.zeromq.org/mailman/listinfo/zeromq-dev
--
Kind regards,
Luca Boccassi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: This is a digitally signed message part
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20180926/56cdf496/attachment.sig>
More information about the zeromq-dev
mailing list