Discussione chiusa
Visualizzazione dei risultati da 1 a 2 su 2

Alternativa a QLibrary o a libtool

  1. #1
    giorgik non è in linea Novello
    Ciao a tutti, ho fatto un porting in Windows XP di un programma scritto in C++ per Linux.
    Per fare in fretta ho usato l'ambiente di programmazione Qt 4.8.2 per il compilatore MinGW 4.6.2
    In tale programma scritto per Linux originariamente si fa uso della libreria libtool per caricare le librerie dinamiche.
    Di seguito riporto il pezzo di codice interessato:

        void Model::LoadControllerModule( const char *lib )
        {
            printf( "[Ctrl \"%s\"]\n", lib );
    
            // Initialise libltdl.
            int errors = lt_dlinit();
            if (errors)
            {
              printf( "Libtool error: %s. Failed to init libtool. Quitting\n",
                      lt_dlerror() ); // report the error from libtool
              puts( "libtool error #1" );
              fflush( stdout );
              exit(-1);
            }
    
            printf( "[STAGEPATH: %s]\n",  FileManager::stagePath().c_str());
    
            lt_dlsetsearchpath( FileManager::stagePath().c_str() );
            printf( "ltdl search path: %s\n", lt_dlgetsearchpath() );
    
            // PLUGIN_PATH now defined in config.h
            lt_dladdsearchdir( PLUGIN_PATH );
            printf( "ltdl search path: %s\n", lt_dlgetsearchpath() );
    
            lt_dlhandle handle = NULL;
         
            // the library name is the first word in the string
            char libname[256];
            sscanf( lib, "%s %*s", libname );
    
            printf( "libname: %s\n", libname );
    
            if(( handle = lt_dlopenext( libname ) ))
            {
                model_callback_t initfunc = (model_callback_t)lt_dlsym( handle, "Init" );
                if( initfunc  == NULL )
                {
                    printf( "(Libtool error: %s.) Something is wrong with your plugin.\n",
                            lt_dlerror() ); // report the error from libtool
                    puts( "libtool error #1" );
                    fflush( stdout );
                    exit(-1);
                }
    
                // pass complete string into initfunc
                AddCallback( CB_INIT, initfunc, new CtrlArgs(lib, World::ctrlargs) );
            }
            else
            {
                printf( "(Libtool error: %s.) Can't open your plugin.\n",
                        lt_dlerror() ); // report the error from libtool
              
                PRINT_ERR1( "Failed to open \"%s\". Check that it can be found by searching the directories"
                            "in your STAGEPATH environment variable, or the current directory if STAGEPATH "
                            "is not set.]\n", libname );
                   
                printf( "ctrl \"%s\" STAGEPATH \"%s\"\n", libname, PLUGIN_PATH );
                   
                puts( "libtool error #2" );
                fflush( stdout );
                exit(-1);
            }
         
            fflush(stdout);
        }
    
    Come dicevo prima ho usato l'ambiente Qt per risolvere il problema impiegando la classe QLibrary
    di seguito riporto il codice che sostituisce quello sopra riportato:

        void Model::LoadControllerModule( const char *lib )
        {
            printf( "Model::LoadControllerModule() - [Ctrl \"%s\"", lib );
            fflush(stdout);
    
            char libname[256];
            strcpy(libname, lib);
            printf( "\nModel::LoadControllerModule() - libname = %s\n", libname );
            QLibrary library(libname);
            model_callback_t initfunc = (model_callback_t)library.resolve("Init");
            printf( "]" );
    
            if(initfunc == 0)
            {
                // report the error from QLibrary
                printf("\nModel::LoadControllerModule() - QLibrary error(%s) \nSomething is wrong with your
                          plugin.\n", library.errorString().toStdString().c_str());
                printf("QLibrary error #1\n");
    
                return;
            }
    
            // pass complete string into initfunc
            AddCallback(CB_INIT, initfunc, new CtrlArgs(lib, World::ctrlargs));
        }
    
    Così facendo funziona benissimo.
    Ora vorrei trovare una soluzione che non faccia uso delle Qt 4.8.2 ma che usi normale codice in MinGW 4.7.1 usando come IDE Code::Blocks 13.12.
    Mi potete aiutare a tal proposito ?

  2. #2
    Chiuso per crossposting con

    Alternativa a QLibrary o a libtool : Forum C/C++

    Per favore, leggi e rispetta il regolamento.
    ℹ️ Leggi di più su AntonioG ...

Discussione chiusa

Potrebbero interessarti anche ...

  1. [C++] Alternativa a DevC++
    Da imbranato nel forum C/C++
    Risposte: 12
    Ultimo Post: 15-06-2012, 16:10
  2. Alternativa ad ACCESS
    Da marco.santilli nel forum Altri Database Server
    Risposte: 4
    Ultimo Post: 01-02-2012, 19:12
  3. Alternativa a MediaElement
    Da panatronic nel forum C#
    Risposte: 5
    Ultimo Post: 09-06-2011, 14:02
  4. Alternativa al Range
    Da marcozanet nel forum Microsoft Word
    Risposte: 11
    Ultimo Post: 03-06-2010, 10:02
  5. Alternativa a Range
    Da Nottambulo nel forum Microsoft Word
    Risposte: 2
    Ultimo Post: 12-02-2010, 16:20