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

Bill Torpey wallstprog at gmail.com
Wed Sep 26 20:10:28 CEST 2018


Luca:

All your points are well-taken; there are plenty of times I wish we were less strict, but in the long run it works for us — because it has to.

And you’re right that neither libsodium nor openpgm are part of core RedHat/CentOS — both are supplied by EPEL.  We make an exception for those packages in development, but still don’t allow them to be installed in production.

Bill


> On Sep 26, 2018, at 1:41 PM, Luca Boccassi <luca.boccassi at gmail.com> wrote:
> 
> 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 <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 <mailto:opfer at vs.un>
>>>>>>> i <mailto:opfer at vs.uni <mailto:opfer at vs.uni>>-ka
>>>>>>> ssel.de <http://ssel.de/> <http://ssel.de/ <http://ssel.de/>> <mailto:opfer at vs.uni-kassel.de <mailto:opfer at vs.uni-kassel.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 <mailto:opfer at vs.un>
>>>>>>>>> i <mailto:opfer at vs.uni <mailto:opfer at vs.uni>>-ka
>>>>>>>>> ssel.de <http://ssel.de/> <http://ssel.de/ <http://ssel.de/>> <mailto:opfer at vs.uni <mailto:opfer at vs.uni>-
>>>>>>>>> kassel.de <http://kassel.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- <http://lists.zeromq.org/mailman/private/zeromq-dev/2017-> <ht
>>>>>>>>> tp://lists.zeromq.org/mailman/private/zeromq-dev/2017- <tp://lists.zeromq.org/mailman/private/zeromq-dev/2017->>
>>>>>>>>> January/031309.html
>>>>>>>>> <https://lists.zeromq.org/mailman/private/zeromq-dev/20 <https://lists.zeromq.org/mailman/private/zeromq-dev/20>
>>>>>>>>> 17- <https://lists.zeromq.org/mailman/private/zeromq- <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 <http://gist.github.com/StephanOpfer/5b9f3f76e6610536078cb9c16>
>>>>>>>>> 072a <http://gist.github.com/StephanOpfer/5b9f3f76e6610 <http://gist.github.com/StephanOpfer/5b9f3f76e6610>
>>>>>>>>> 536078cb9c16072a>
>>>>>>>>> ac9
>>>>>>>>> <https://gist.github.com/StephanOpfer/5b9f3f76e66105360 <https://gist.github.com/StephanOpfer/5b9f3f76e66105360>
>>>>>>>>> 78cb
>>>>>>>>> <https://gist.github.com/StephanOpfer/5b9f3f76e66105360 <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.zeromq.org> <mailto:zeromq-dev at lists.ze <mailto:zeromq-dev at lists.ze>
>>>>>>>>> romq.org <http://romq.org/>> <mailto:zeromq-dev at lists.zeromq <mailto:zeromq-dev at lists.zeromq> <mailto:zerom
>>>>>>>>> q-dev at lists.zeromq <mailto: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>>
>>>>>>>>> <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.zero <mailto:zeromq-dev at lists.zero>
>>>>>>>> mq.org <http://mq.org/>> <mailto:zeromq-dev at lists.zeromq.o <mailto:zeromq-dev at lists.zeromq.o> <mailto:zeromq-
>>>>>>>> dev at lists.zeromq.o <mailto: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>>
>>>>>>>> <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 <mailto: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 <mailto: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>>
>>>>>>> <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 <mailto: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 <mailto: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>>
>>>>>>> <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.o <mailto:zeromq-dev at lists.zeromq.o>
>>>>>> rg> <mailto:zeromq-dev at lists.zeromq.org <mailto:zeromq-dev at lists.zeromq.org> <mailto:zeromq-dev at li
>>>>>> sts.zeromq.org <http://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>>
>>>>>> <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-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.zeromq.org> <mailto: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>
>>>> <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> <mailto: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>
>>> <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_______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> https://lists.zeromq.org/mailman/listinfo/zeromq-dev

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


More information about the zeromq-dev mailing list