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

Stephan Opfer opfer at vs.uni-kassel.de
Wed Sep 26 22:47:16 CEST 2018


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/

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20180926/44c0f410/attachment.htm>


More information about the zeromq-dev mailing list