Ice-E 3.6.0 Release Notes
Ice-E brings Ice to embedded devices, in particular Linux/ARM devices. Ice-E adds cross-compilation capabilities to Ice: with Ice plus Ice-E, you can develop C++ applications for Linux/ARM systems on your Linux x86_64 workstation.
On this page:
Comparing Ice-E and Ice
Ice-E and Ice provide the same API and implement the same Ice protocol. Here is a brief comparison of these two products:
Feature | Ice-E | Ice |
---|---|---|
C++, Python | ||
Java, JavaScript, Objective-C, PHP, Ruby | ||
Ice transports: tcp, ssl, ws, wss, udp | ||
Client libraries for Ice services (IceGrid, IceStorm etc.) | ||
Glacier2 firewall traversal service | ||
Other Ice services (IceGrid, IceStorm, Freeze, IcePatch2) | ||
IceBox | ||
Supports cross-compilation to Linux/ARM | ||
Static libraries | ||
Dynamic libraries |
New features in Ice-E 3.6.0
This section outlines changes and improvements in this release that may affect the operation of your applications or have an impact on your source code.
Changes
- Ice-E is now fully in-sync with Ice:
- Ice-E uses the same developer kit as Ice: the Slice files, C++ header files, and Slice compiler (slice2cpp) are shared by Ice and Ice-E.
- The Ice-E and Ice versions are now the same.
- The preferred method to install Ice-E on Ubuntu is now through apt repositories.
- IceDiscovery, IceLocatorDiscovery, IceSSL, IceStringConverter and IceUtil are all included in the Ice static library.
Support for Ice 3.6.0 features
Ice-E 3.6.0 is based on the Ice 3.6.0 release. For more information see the Ice 3.6.0 Release Notes.
Using Plug-ins with Static Libraries
Ice-E provides only static libraries, which presents a challenge for loading plug-ins: since there is no shared library loading at run time, the plug-ins must be linked with your application.
Despite this difficulty, Ice-E offers plug-ins just like Ice, and provides the same built-in plug-ins: IceDiscovery
, IceLocatorDiscovery
, IceSSL
, and IceStringConverter
.
You link these plug-ins with your application by calling the Ice::registerPluginFactory
function in your code, for example:
// Declare the plug-in factory function for IceSSL extern "C" { Ice::Plugin* createIceSSL(const Ice::CommunicatorPtr&, const string&, const Ice::StringSeq&); } int main(int argc, char* argv[]) { // Register this plug-in factory function before communicator initialization Ice::registerPluginFactory("IceSSL", createIceSSL, false); ... }
Refer to the Plug-in API for more information on Ice::registerPluginFactory
.
You can configure the plug-in using properties as usual.
The IceDiscovery
, IceLocatorDiscovery
, IceSSL
, and IceStringConverter
plug-ins are included in the libIce.a
static library. Ice 3.6.0 header files do not provide declarations for the corresponding plug-in factory functions, and as a result you need to provide your own declarations for these functions to register them. The names of these factory functions are always create<PluginName>
, for example createIceSSL
, createIceDiscovery
.
This mechanism isn't limited to the built-in Ice plug-ins – it can also be used to load your own plug-ins.
Upgrading your application from a previous version of Ice-E
Ice-E 3.6 is not compatible with previous versions of Ice-E. As part of your upgrade to Ice-E 3.6, you need to update your source code and recompile all your Slice files.