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.