Ho bisogno di collegare dinamicamente una libreria che ho creato. Non sono esattamente sicuro di quale sia il problema. Il tutto viene compilato correttamente, ma ho sempre prendere handle
come il puntatore NULL
:Uso corretto librerie libdl e collegate dinamicamente
void *handle;
char *error;
handle = dlopen ("./hw11-lib-michaelSchilling.so", RTLD_LAZY);
//same error comes up with full path as well as './hw11...'
if(!handle){
error = dlerror();
printf("%s\n", error);
printf("Error loading library.\n");
exit(1);
}
Non posso avere superato questo errore e non sono sicuro di quello che potrebbe essere sbagliato. Sono abbastanza sicuro di aver compilato tutto correttamente. Ecco i passaggi di compilazione che ho usato:
gcc -rdynamic -c hw11-lib-michaelSchilling.c -o hw11-lib-michaelSchilling.so
gcc hw11-michaelSchilling-4.c -ldl -o hw11-michaelSchilling-4
Ricevo un errore che recita
solo ET_DYN e ET_EXEC possono essere caricati.
Insieme a '-rdynamic'? Ho appena provato con entrambi e con solo '-shared', ma ho avuto lo stesso errore. –
@MichaelSchilling: Non penso che '-rdynamic' abbia a che fare con il problema, quindi potresti anche tenerlo nel caso in cui sia necessario dal tuo codice. – NPE
@MichaelSchilling: hai rimosso il '-c'? – NPE