Overview
Features
Download
Documentation
Community
Add-Ons & Services
The POCO C++ Libraries Blog

POCO C++ Libraries in biicode

Filed under: Development,News by guenter at 15:58

biicode-logo.29235e86

The POCO C++ Libraries are now available via biicode, in the following versions:

The following post has been contributed by Fran Ramírez from the biicode team. You can also find the original post on the biicode blog.

Benefits

biicode is a file based dependency manager, which has many advantages:

  • Save time reusing from any POCO library (Foundation, Net, NetSSL_OpenSSL, etc.) such times as you need and avoid to configure and build out the libraries first. biicode’ll only retrieve the necessary files to build your project.
  • POCO depends on external libraries like zlib, PCRE (Perl Compatible Regular Expressions), HPDF, 7-Zip, OpenSSL and SQLite that they’re uploaded on biicode and maintained by our users.
  • It’s been tested on biicode in Windows with Visual Studio 10 and Visual Studio 12, Linux with GCC and Apple with CLang.

I recommend you to use Visual Studio to configure your project because with MinGW you could get some errors.

POCO External Dependencies

These libraries have many external and third party dependencies to build some of them, e.g., Foundation depends on PCRE and ZLib. Without biicode PCRE and ZLib source files must be present in POCO project, but with biicode it’s not needed. The following table shows all the dependencies for every version uploaded which biicode’ll find if you use all the modules in a project:

So, you’ll not have to worry about to install or build them, biicode does all the effort for you ;) . These are the depending blocks in biicode:

  • PCRE(v8.36): fenix/pcre
  • PCRE(v7.8): fenix/pcre(v7.8)
  • HPDF: fenix/hpdf
  • zlib: zlib/zlib
  • 7-Zip: fenix/7z
  • OpenSSL: lasote/openSSL(v1.0.2)
  • SQLite: fenix/sqlite

Using POCO C++ Libraries In Your Project

1. Create a new project and an empty block:

$ bii init poco_sample
$ cd poco_sample
$ bii new myuser/myblock

2. Add your sample code (orignal code from Net/samples/dict.cpp) into ./blocks/myuser/myblock/sample.cpp:

// dict.cpp
//
// $Id: //poco/1.4/Net/samples/dict/src/dict.cpp#1 $
//
// This sample demonstrates the StreamSocket and SocketStream classes.
//
// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier:	BSL-1.0
 
#include "fenix/poco/Net/include/Poco/Net/StreamSocket.h"
#include "fenix/poco/Net/include/Poco/Net/SocketStream.h"
#include "fenix/poco/Net/include/Poco/Net/SocketAddress.h"
#include "fenix/poco/Foundation/include/Poco/StreamCopier.h"
#include "fenix/poco/Foundation/include/Poco/Path.h"
#include "fenix/poco/Foundation/include/Poco/Exception.h"
#include 
 
using Poco::Net::StreamSocket;
using Poco::Net::SocketStream;
using Poco::Net::SocketAddress;
using Poco::StreamCopier;
using Poco::Path;
using Poco::Exception;
 
int main(int argc, char** argv)
{
      const std::string HOST("dict.org");
      const unsigned short PORT = 2628;
 
      if (argc != 2)
      {
            Path p(argv[0]);
            std::cout << "usage: " << p.getBaseName() << " " << std::endl;
            std::cout << "       looks up  in dict.org and prints the results" << std::endl;
            return 1;
      }
      std::string term(argv[1]);
 
      try
      {
            SocketAddress sa(HOST, PORT);
            StreamSocket sock(sa);
            SocketStream str(sock);
 
            str << "DEFINE ! " << term << "\r\n" << std::flush;
            str << "QUIT\r\n" << std::flush;
 
            sock.shutdownSend();
            StreamCopier::copyStream(str, std::cout);
      }
      catch (Exception& exc)
      {
            std::cerr << exc.displayText() << std::endl;
            return 1;
      }
      return 0;
}

3. Choose which uploaded POCO version you want to depend on, configure it through your ./blocks/myuser/myblock/biicode.conf file. Create it and copy the following:

[requirements]
   fenix/poco(v1.6.0): 0

4. Finally, you’d only have to retrieve your POCO dependencies and build your sample.cpp. For it, use this command:

bii cpp:build

Note: for Windows users, to configure your project with Visual Studio, e.g., 10 version, execute:

$ bii cpp:configure -G "Visual Studio 10"
$ bii cpp:build

So, biicode’ll download all the dependencies from release version 1.6.0 and compile the project. Now, you can run the binary created in your ./bin/ folder.

Use The Original #include's

Change all the includes from the previous sample.cpp code to:

...
#include "Poco/Net/StreamSocket.h"
#include "Poco/Net/SocketStream.h"
#include "Poco/Net/SocketAddress.h"
#include "Poco/StreamCopier.h"
#include "Poco/Path.h"
#include "Poco/Exception.h"
...

Now, tell biicode how to find this dependencies, so, modify again the biicode.conf and add the following:

[includes]
    Poco/Net/*.h: fenix/poco/Net/include
    Poco/*.h: fenix/poco/Foundation/include

Warning: take care with Poco/*.h: fenix/poco/Foundation/include because it should always be at the end of [includes] section for being a really wide search pattern.

Finally, clean the metadata and build again the project:

$ bii clean
$ bii cpp:build

Creating A Project With NetSSL_OpenSSL or NetSSL_Win

Making a project using these libraries is a special use case of original includes. Why? Take a look at the following example:

#include "Poco/URIStreamOpener.h"
#include "Poco/StreamCopier.h"
#include "Poco/Path.h"
#include "Poco/URI.h"
#include "Poco/SharedPtr.h"
#include "Poco/Exception.h"
 
/* headers in Net library */
#include "Poco/Net/HTTPStreamFactory.h" 
#include "Poco/Net/FTPStreamFactory.h"
 
/* headers in NetSSL_OpenSSL and NetSSL_Win libraries */
#include "Poco/Net/HTTPSStreamFactory.h" 
#include "Poco/Net/SSLManager.h" 
#include "Poco/Net/KeyConsoleHandler.h" 
#include "Poco/Net/ConsoleCertificateHandler.h"
 
#include 
#include 
 
/* Main code */

Like you see, NetSSL_OpenSSL and NetSSL_Win have the same relative inlcude headers, so, the only way to resolve successfully your dependencies is writing the full path for them.

#include "Poco/URIStreamOpener.h"
#include "Poco/StreamCopier.h"
#include "Poco/Path.h"
#include "Poco/URI.h"
#include "Poco/SharedPtr.h"
#include "Poco/Exception.h"
 
/* headers in Net library */
#include "Poco/Net/HTTPStreamFactory.h" 
#include "Poco/Net/FTPStreamFactory.h"
 
/* headers in NetSSL_OpenSSL library */
#include "fenix/poco/NetSSL_OpenSSL/include/Poco/Net/HTTPSStreamFactory.h" 
#include "fenix/poco/NetSSL_OpenSSL/include/Poco/Net/SSLManager.h" 
#include "fenix/poco/NetSSL_OpenSSL/include/Poco/Net/KeyConsoleHandler.h" 
#include "fenix/poco/NetSSL_OpenSSL/include/Poco/Net/ConsoleCertificateHandler.h"
 
#include 
#include 
 
/* Main code */

The biicode.conf would be like the previous one.

Build All POCO Samples

Try to build all the available samples Poco brings us with each release. Create a project, open any examples/poco block and build it, e.g., examples from 1.4.7p1 version:

$ bii init samples_1_4_7p1
$ bii open "examples/poco(v1.4.7p1)"
$ bii cpp:build

So, that’s all! POCO C++ Libraries are amazing and I strongly recommend you to start using them for your network projects.

I hope you enjoy with this post and don’t forget check our complete C++ documentation! If you’ve any doubt, contact us through our forum or ask directly in Stackoverflow.

10 Years of POCO

Filed under: Events by guenter at 11:16

Today is the 10th anniversary of the first public release of POCO on SourceForge.
Here’s my first entry from the CHANGELOG:

Release 0.91.1 (2005-02-21)
===========================

This is the first public release of the C++ Portable Components.
The release does not contain all features planned for the later 1.0 release
(the NET library is missing, for example), but is already quite usable.
Please refer to the README file for more information and instructions for
building the libraries.

We’ve come quite far in this 10 years. From the first contributions by Alex a few weeks after the first release (I received his first email on March 24), to the 1.0 release in January 2006, to the move to GitHub in November 2012, which tremendously helped POCO’s popularity and also brought many new contributors.

Today, POCO is used in countless projects, ranging from desktop applications, iOS and Android apps, enterprise applications and embedded devices. Although there’s still some work to do in becoming known to an even wider audience (apparently, there are still C++ developers out there who haven’t heard of POCO), I’m quite happy how everything has turned out.

A big Thank You to everyone who has contributed to POCO, via code, donations or bug reports.
Here’s to the next 10 years!

Embedded World 2015

Filed under: Events,News by guenter at 08:44

Günter Obiltschnig will be at Embedded World February 24 to 25. We don’t have a booth, but Günter would be happy to meet for lunch, coffee or a drink. Please get in touch if you’d like to schedule a meeting.

Merry Christmas!

Filed under: Events by guenter at 10:26

Merry Christmas and a Happy New Year 2015!

xmas2014

Stable Release 1.6.0 Available!

Filed under: News by guenter at 11:11

Release 1.6.0 is the culmination of the work done on GitHub over the last two years, including five development releases. It includes major new features from new contributors, like the JSON and MongoDB libraries, much improved Data library, CMake support, as well as numerous other new features and fixes. A big Thank You to everyone who contributed to this release.

Release 1.4.7p1 Available

Filed under: News by guenter at 19:51

Release 1.4.7p1 fixes a few issues in 1.4.7 and earlier releases. Most important, the Visual C++ project files for Visual C++ 2010 and later have optimization enabled in release builds. Previous builds had optimization disabled due to a bug in Visual Studio when upgrading 2008 project files with custom optimization settings.
There’s a new feature as well – HTTPClientSession now supports a global proxy setting, which will be used by all instances of HTTP(S)ClientSession, including HTTP(S)StreamOpener.
For more information about the release, please see the CHANGELOG.

Happy Thanksgiving!

Peter Gabriel Live and POCO?

Filed under: Uncategorized by guenter at 12:25

Yesterday I saw Peter Gabriel’s Back to Front live show in Graz, Austria. Apart from it being an excellent show, there is a little connection to the POCO C++ Libraries in there as well. A big part of the show are the visual effects, including live video, which for some effects is heavliy processed. A little digging around the net reveals that these effects were done with openFrameworks. And for some time now, POCO has been a part of openFrameworks. I don’t know if any parts of POCO were directly involved here, but the connection is nevertheless cool.

IMG_3988

IMG_3975

Stable Release 1.4.7 and Development Release 1.5.4 Available

Filed under: News by guenter at 19:20

Release 1.4.7 is the final release of the 1.4 series and contains bugfixes and a few new features. Development release 1.5.4 should also be the final release of the 1.5 series, before 1.5 “graduates” to stable 1.6. As usual, available on the download page or directly from GitHub.

Development Release 1.5.3 Available

Filed under: News by guenter at 10:49

Development Release 1.5.3 is now available for download.

Release highlights:

New Libraries:

  • SevenZip

New Classes:

  • Poco::Clock
  • Poco::Net::NTPClient

New major features:

  • Windows PowerShell build script

New Platforms supported:

  • SmartOS
  • Windows Embedded Compact 2013

and many more bugfixes and improvements; see the CHANGELOG for details. Available on the download page or from GitHub.

POCO 1.5.3 Release Candidate 1 Available

Filed under: Development,News by alex at 05:06

Release Candidate 1 of POCO 1.5.3 has been tagged on the GitHub. Release 1.5.3 is scheduled for June 30 2014.

Next Page »