bool dynamic_link( const char* library, const dynamic_link_descriptor descriptors[], size_t required, dynamic_link_handle *handle, int flags ) {
        atomic_once( &init_dl_data, init_dl_data_state );

        // TODO: May global_symbols_link find weak symbols?
        dynamic_link_handle library_handle = ( flags & DYNAMIC_LINK_GLOBAL ) ? global_symbols_link( library, descriptors, required ) : 0;

        if ( !library_handle && ( flags & DYNAMIC_LINK_LOAD ) )
            library_handle = dynamic_load( library, descriptors, required );

        if ( !library_handle && ( flags & DYNAMIC_LINK_WEAK ) )
            return weak_symbol_link( descriptors, required );

        save_library_handle( library_handle, handle );
        return true;
    }
    static size_t abs_path( char const * name, char * path, size_t len ) {
        atomic_once( &init_dl_data, init_dl_data_state );

        if ( !ap_data._len )
            return 0;

        size_t name_len = strlen( name );
        size_t full_len = name_len+ap_data._len;
        if ( full_len < len ) {
            strncpy( path, ap_data._path, ap_data._len );
            strncpy( path+ap_data._len, name, name_len );
            path[full_len] = 0;
        }
        return full_len;
    }
 void init_dynamic_link_data() {
 #if __TBB_DYNAMIC_LOAD_ENABLED
     atomic_once( &init_dl_data, init_dl_data_state );
 #endif
 }
 static_init_dl_data_t() {
     atomic_once( &init_dl_data, init_dl_data_state );
 }
     _static_init_dl_data() {
 #if __USE_STATIC_DL_INIT
         atomic_once( &init_dl_data, init_dl_data_state );
 #endif
     }