[zeromq-dev] Revisited: Example for building against ZMQ with CMake + UDP Multicast Support

Luca Boccassi luca.boccassi at gmail.com
Wed Sep 26 23:08:04 CEST 2018


That said, I'll have a look and see if I can add a +draft to the
version number of draft builds in OBS so that they work out as higher.
Given they are in a separate repo it's reasonable to assume they are
intended to have priority.
On Wed, 26 Sep 2018 at 22:06, Luca Boccassi <luca.boccassi at gmail.com> wrote:
>
> The -X is added because this is how versioning in distribution works:
>
> https://www.debian.org/doc/debian-policy/ch-controlfields.html#version
>
> The reason for a separate build for draft APIs is that they can change
> at any moment without any warning in an incompatible way and break
> existing programs, so they are not suitable for distros and production
> use.
>
> On Wed, 26 Sep 2018 at 21:48, Stephan Opfer <opfer at vs.uni-kassel.de> wrote:
> >
> > Ah thx, for that option. I was just wondering, why the hell ubuntu is adding -1 to their version. Its probably the same version as your stable versionin your repo, right?
> >
> > The actual best solution in my opinion would be to have a libzmq3draft-dev and libzmq5draft in ubuntu as well...
> >
> > So I did switch to the rolling one and it finally works. :D
> >
> >
> > On 26.09.2018 18:47, Luca Boccassi wrote:
> >
> > Right, I thought you were using the rolling one, my bad.
> >
> > In that case you can add the following to /etc/apt/preferences.d/zmq
> >
> > Package: *
> > Pin: origin download.opensuse.org
> > Pin-Priority: 1000
> >
> > Priority of 1000 means that it will install packages from that origin
> > even if they are technically downgrades.
> >
> > On Wed, 2018-09-26 at 18:08 +0200, Stephan again wrote:
> >
> > Well... thats not the case for "release-draft". There it is 4.2.5
> > and
> > ubuntu provides 4.2.5-1.
> >
> > Doh!
> >
> >
> > On 26.09.2018 18:02, Luca Boccassi wrote:
> >
> > The packages from OBS have a higher version so they already have
> > priority:
> >
> > $ dpkg --compare-versions 4.2.5+git20180922 gt 4.2.5-1  && echo
> > true || echo false
> > true
> >
> > So either you haven't ran apt upgrade, or you have manually pinned
> > it down, check with:
> >
> > apt-cache policy libzmq5
> >
> > On Wed, 2018-09-26 at 17:42 +0200, Stephan again wrote:
> >
> > Update:
> >
> > I investigated my .so files with "readelf -Ws" and "objdump -T"
> > and
> > both
> > say that there are no draft api symbols. Nevertheless, when I
> > download
> > the deb package from zeromq's repo and investigate the libraries
> > in
> > there with the same tools, it matches.
> >
> > So regarding the dynamic library, there is definitely a wrong
> > version
> > installed. Leading to the question, why is that: "sudo apt-cache
> > showpkg
> > libzmq3-dev" says:
> >
> > Package: libzmq3-dev
> > Versions:
> > 4.2.5-1
> > (/var/lib/apt/lists/de.archive.ubuntu.com_ubuntu_dists_bionic_uni
> > vers
> > e_binary-amd64_Packages)
> > (/var/lib/dpkg/status)
> >    Description Language:
> >                    File:
> > /var/lib/apt/lists/download.opensuse.org_repositories_network:_me
> > ssag
> > ing:_zeromq:_release-draft_xUbuntu%5f18.04_._Packages
> >                     MD5: 7b2c1e47f6d305566aebc0e65e04f5ee
> >    Description Language:
> >                    File:
> > /var/lib/apt/lists/download.opensuse.org_repositories_network:_me
> > ssag
> > ing:_zeromq:_release-draft_xUbuntu%5f18.04_._Packages
> >                     MD5: 7b2c1e47f6d305566aebc0e65e04f5ee
> >    Description Language:
> >                    File:
> > /var/lib/apt/lists/de.archive.ubuntu.com_ubuntu_dists_bionic_univ
> > erse
> > _binary-amd64_Packages
> >                     MD5: 7b2c1e47f6d305566aebc0e65e04f5ee
> >    Description Language:
> >                    File:
> > /var/lib/apt/lists/de.archive.ubuntu.com_ubuntu_dists_bionic_univ
> > erse
> > _binary-i386_Packages
> >                     MD5: 7b2c1e47f6d305566aebc0e65e04f5ee
> >    Description Language: en_GB
> >                    File:
> > /var/lib/apt/lists/de.archive.ubuntu.com_ubuntu_dists_bionic_univ
> > erse
> > _i18n_Translation-en%5fGB
> >                     MD5: 7b2c1e47f6d305566aebc0e65e04f5ee
> >    Description Language: en
> >                    File:
> > /var/lib/apt/lists/de.archive.ubuntu.com_ubuntu_dists_bionic_univ
> > erse
> > _i18n_Translation-en
> >                     MD5: 7b2c1e47f6d305566aebc0e65e04f5ee
> >
> > So in my opinion the zeromq repo should have priority over the
> > ubuntu
> > repo.
> >
> > Further investigating. Help is welcome.
> >
> > - Stephan
> >
> >
> > On 26.09.2018 17:21, Luca Boccassi wrote:
> >
> > And so does the shared library:
> >
> > $ objdump -T libzmq.so.5.1.5 | grep msg_group
> > 0000000000075a60 g    DF .text 0000000000000005  Base
> >   zmq_msg_group
> >
> > Make sure you have actually installed it from that repository
> > and
> > not
> > from Ubuntu's.
> >
> > On Wed, 2018-09-26 at 17:10 +0200, Stephan again 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:/messagin
> > g:/z
> > erom
> > q:/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.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.uni-kassel.de <mailto:opfer at vs.uni-ka
> > ssel.
> > de>>
> > wrote:
> >
> >       Hi,
> >
> >       I asked this question/issue one and a half year
> > ago
> >       (https://lists.zeromq.org/mailman/private/zerom
> > q-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/5b9f3f76e6
> > 61053
> > 6078c
> > b9c16072aac9
> >
> >       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@
> > lists
> > .zero
> > mq.org>
> >       https://lists.zeromq.org/mailman/listinfo/zerom
> > q-dev
> >
> >       _______________________________________________
> >       zeromq-dev mailing list
> >       zeromq-dev at lists.zeromq.org <mailto:zeromq-dev at li
> > sts.z
> > eromq
> > .org>
> >       https://lists.zeromq.org/mailman/listinfo/zeromq-
> > dev
> >
> >       _______________________________________________
> >       zeromq-dev mailing list
> >       zeromq-dev at lists.zeromq.org <mailto:zeromq-dev at list
> > s.zer
> > omq.o
> > rg>
> >       https://lists.zeromq.org/mailman/listinfo/zeromq-de
> > v
> >
> >
> >
> > _______________________________________________
> > zeromq-dev mailing list
> > zeromq-dev at lists.zeromq.org
> > 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
> >
> > _______________________________________________
> > zeromq-dev mailing list
> > zeromq-dev at lists.zeromq.org
> > 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
> >
> > _______________________________________________
> > zeromq-dev mailing list
> > zeromq-dev at lists.zeromq.org
> > 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
> >
> > _______________________________________________
> > zeromq-dev mailing list
> > zeromq-dev at lists.zeromq.org
> > 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
> >
> >
> > --
> > Distributed Systems Research Group
> > Stephan Opfer  T. +49 561 804-6283  F. +49 561 804-6277
> > Univ. Kassel,  FB 16,  Wilhelmshöher Allee 73,  D-34121 Kassel
> > WWW: http://www.uni-kassel.de/go/vs_stephan-opfer/
> >
> > _______________________________________________
> > zeromq-dev mailing list
> > zeromq-dev at lists.zeromq.org
> > https://lists.zeromq.org/mailman/listinfo/zeromq-dev



More information about the zeromq-dev mailing list