[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [paho-dev] Building the C++ API/samples
|
I am very interested in getting or building MQTT client(s) for embedded
OSes such as FreeRTOS and mbed as we are getting inquiries about such
environments. Some applications require the client libraries to be as
small as they can be, as well as support for various non-Posix system
libraries.
I was thinking about having a separate codebase in Paho for such
environments with:
a) some sort of pluggable lower layer so it was easy to port to
different networking and other system libraries
b) a simple threading model, say one thread per client object, as
simplicity is top priority
c) still using standard C, for maximum portability and small size (is
that still a benefit?)
What do you think? Is that a good approach?
Ian
On 15/11/13 16:22, Frank Pagliughi wrote:
Unfortunately, no. I haven't looked to automated tests yet. The C++
update is mainly for completing some of the missing implementation,
and so far will cover:
- Better implementation of exceptions
- Bug fixes
- More complete doxygen documentation (mostly stolen from the Javadoc's)
- Better Windows support
- Tested against the latest C lib
- autoconf build support for Linux especially for cross-compiling
(probably cover the C lib sources as well)
- Boost support for pre-C++-11 compilers (maybe)
- Tested on several open hardware platforms, including RaspberryPi and
BeagleBone
As I may have mentioned a while back, my personal area for MQTT is
industrial embedded systems and data loggers. So the Boost support is
becoming a personal need, as several of the embedded boards I'm facing
use GCC in the v4.1-4.5 range. That also sparked the desire for easy
Linux cross-compiler support that autoconf would bring. The open
platforms are not industrial quality, but serve as a good proxy for
porting the software.
Frank
On 11/14/2013 11:06 AM, Ian Craggs wrote:
What's in the update? Automated tests? :-)
I haven't been able to use it yet due to the lack of a C++11 compiler
on the machines I've tried so far.
Ian
On 14/11/13 14:20, Frank Pagliughi wrote:
Sounds good. I have been working on an update - though, admittedly,
a bit slowly. I'd appreciate any feedback.
Frank
On 11/13/2013 04:24 PM, Ian Craggs wrote:
Frank,
I am happy with that approach. It's nice to be able to use recent
language features without having to wait 5 or 6 years! And as you
say, we have the C library to fall back on - after all, the C
library is C rather than C++ because template support just didn't
work in gcc when I started writing the first implementation.
Making it Boost compatible is up to you. Personally I'm more
interested in automated build and tests. And we obviously ought to
make it clear in big letters that it needs C++11 and what the
options are otherwise.
What I would say is that I think before making the C++ library a
"first class" citizen of Paho, we would have to wait until we can
build and test it for Linux at least in the Eclipse build
infrastructure. I'll probably raise a(nother) bug request and see
how that goes down! (I already have a bug open on Windows/Mac
builds which is an ongoing discussion).
Now I'll dig out my own machine with a recent Linux OS on it...
Ian
On 13/11/13 18:53, Frank Pagliughi wrote:
Hello Ian,
Yes, several people asked me about this, particularly people stuck
with an older cross-compiler for an embedded system. Including me,
as it turns out! The earliest GCC I suspect that would work is
4.6. For Windows, DevStudio 2012 is needed (though I still have to
do more testing on Windows to be sure this works properly).
The implementation makes heavy use of the C++11 libraries -
threads, sync objects, time (chrono), and shared pointers. When we
discussed this prior to my submission last spring, everyone seemed
OK to proceed along these lines as we could "look forward" with
the C++ implementation, since people could fall back to the C
library if necessary.
I was, however, going to investigate using Boost for older
compilers - so Boost would *not* be needed (at all) for a C++11
compiler, but could be used for an older compiler. It has nearly
drop-in replacements for threading, time/chrono, and shared
pointer libraries. I would still need to change/remove a few of
the new language features (nullptr, noexcept, etc).
But without using Boost, the required changes/additions would be a
lot of work.
To be clear, we would not need to ship any boost code (no
licensing issues), but anyone with GCC <= 4.5 or VisualStudio <=
2010, could still use the Paho C++ library with Boost as an
external requirement. And since Boost can be cross-compiled easily
enough, this is a viable solution for embedded cross-compiled
targets.
What do you think of that?
Frank
On 11/13/2013 11:27 AM, Ian Craggs wrote:
Hi Frank,
trying to build the C++ samples on my RedHat workstation, I get
the output included below. At least the first one is presumably
due to the older version of gcc installed (4.4.7-3) - I haven't
looked at the rest yet. But the version of gcc installed on at
least one of the Eclipse build servers is older than that (4.3.4).
Should/could we have a solution for pre C++11 compilers?
Ian
g++ -I.. -I../../../org.eclipse.paho.mqtt.c/src -D_NDEBUG -Wall
-std=c++0x -O2 -o async_publish async_publish.cpp -L../lib
-L../../../org.eclipse.paho.mqtt.c/src/linux_ia64 -lmqttpp -lmqttv3a
In file included from ../mqtt/token.h:32,
from ../mqtt/async_client.h:31,
from async_publish.cpp:23:
../mqtt/exception.h:73: error: expected ‘;’ before ‘noexcept’
../mqtt/exception.h:76: error: expected ‘;’ before ‘}’ token
In file included from ../mqtt/async_client.h:31,
from async_publish.cpp:23:
../mqtt/token.h: In member function ‘bool
mqtt::token::wait_until_completion(const
std::chrono::time_point<_Clock, _Duration1>&)’:
../mqtt/token.h:315: error: expected primary-expression before
‘[’ token
In file included from ../mqtt/async_client.h:35,
from async_publish.cpp:23:
../mqtt/connect_options.h: In constructor
‘mqtt::connect_options::connect_options()’:
../mqtt/connect_options.h:63: error: could not convert ‘{{'M',
'Q', 'T', 'C'}, 2, 60, 1, 10, 0l, 0l, 0l, 30, 20, 0l, 0l, 0, 0l}’
to ‘MQTTAsync_connectOptions’
async_publish.cpp: In function ‘void sleep(int)’:
async_publish.cpp:38: error: ‘sleep_for’ is not a member of
‘std::this_thread’
async_publish.cpp: In function ‘int main(int, char**)’:
async_publish.cpp:143: error: ‘nullptr’ was not declared in this
scope