Using Plugins with Static Libraries

When a plug-in is packaged in a static library, you need to link your application with the plug-in's static library and call a register function from your application to ensure the corresponding code gets correctly included.

Ice provides the following plug-in registration functions for C++ and Objective-C applications:

C++
namespace Ice
{
    void registerIceUDP(bool loadOnInitialize = true);
    void registerIceIAP(bool loadOnInitialize = true);
    void registerIceBT(bool loadOnInitialize = true);
    void registerIceDiscovery(bool loadOnInitialize = true);
    void registerIceLocatorDiscovery(bool loadOnInitialize = true);
    void registerIceSSL(bool loadOnInitialize = true);
    void registerIceWS(bool loadOnInitialize = true);
    void registerIceStringConverter(bool loadOnInitialize = true);
} 
Objective-C
void ICEregisterIceUDP(BOOL loadOnInitialize);
void ICEregisterIceIAP(BOOL loadOnInitialize);
void ICEregisterIceDiscovery(BOOL loadOnInitialize);
void ICEregisterIceLocatorDiscovery(BOOL loadOnInitialize);
void ICEregisterIceSSL(BOOL loadOnInitialize);
void ICEregisterIceWS(BOOL loadOnInitialize);
void ICEregisterIceStringConverter(BOOL loadOnInitialize);

For example, if you are using a static IceSSL plug-in, link your application with libIceSSL.a and call Ice::registerIceSSL from your application. The UDP, WS, and StringConverter plug-ins are in the main Ice library (libIce.a).

When the bool parameter is true (the default in C++), the plug-in is always loaded (created) during communicator initialization, even if Ice.Plugin.name is not set. When false, the plug-in is loaded (created) during communication initialization only if Ice.Plugin.name is set to a non-empty value (e.g., Ice.Plugin.IceSSL=1).

registerIceIAP is currently available only on iOS.

The table below summarizes the available registration functions and the static libraries where they are defined:

Plug-in NameFunctionalityFunctionLibrary
IceUDPudp transportIce::registerIceUDPlibIce++11.a
IceWSws and wss transportsIce::registerIceWSlibIce++11.a
IceStringConverterconvert native string encoding to/from UTF-8Ice::registerIceStringConverterlibIce++11.a
IceIAPiap and iaps transportsIce::registerIceIAPlibIceIAP++11.a
IceBTbt and bts transportsIce::registerIceBTlibIceBT++11.a
IceSSLicessl transportIce::registerIceSSLlibIceSSL++11.a
IceDiscoveryLocation service implemented using UDP multicastIce::registerIceDiscoverylibIceDiscovery++11.a
IceLocatorDiscoveryLocation service implemented using UDP multicastIce::registerIceLocatorDiscoverylibIceLocatorDiscovery++11.a
Plug-in NameFunctionalityFunctionLibrary
IceUDPudp transportIce::registerIceUDPlibIce.a
IceWSws and wss transportsIce::registerIceWSlibIce.a
IceStringConverterconvert native string encoding to/from UTF-8Ice::registerIceStringConverterlibIce.a
IceIAPiap and iaps transportsIce::registerIceIAPlibIceIAP.a
IceBTbt and bts transportsIce::registerIceBTlibIceBT.a
IceSSLicessl transportIce::registerIceSSLlibIceSSL.a
IceDiscoveryLocation service implemented using UDP multicastIce::registerIceDiscoverylibIceDiscovery.a
IceLocatorDiscoveryLocation service implemented using UDP multicastIce::registerIceLocatorDiscoverylibIceLocatorDiscovery.a
Plug-in NameFunctionalityFunctionLibrary
IceUDPudp transportICEregisterIceUDPlibIce.a
IceWSws and wss transportsICEregisterIceWSlibIce.a
IceStringConverterconvert native string encoding to/from UTF-8ICEregisterIceStringConverterlibIce.a
IceIAPiap and iaps transportsICEregisterIceIAPlibIceIAP.a
IceSSLicessl transportICEregisterIceSSLlibIceSSL.a
IceDiscoveryLocation service implemented using UDP multicastICEregisterIceDiscoverylibIceDiscovery.a
IceLocatorDiscoveryLocation service implemented using UDP multicastICEregisterIceLocatorDiscoverylibIceLocatorDiscovery.a
If you are developing your own plug-in, you will also need to register your plug-in factory function using Ice::registerPluginFactory. Refer to the Plug-in API for more information on this function.