Il mio progetto mira a fornire un'interfaccia comune tra più simulatori HDL diversi, in modo che gli utenti possano scrivere banchi di prova che funzioneranno indipendentemente dal simulatore utilizzato. In questa situazione, è il simulatore, non il codice dell'utente, che è l'applicazione di guida. All'avvio del simulatore, carica con esso una libreria che astrae l'utilizzo del simulatore per adattarlo a un'interfaccia comune. Una libreria è scritta che espone questa interfaccia per ogni simulatore supportato. Quindi un utente può scrivere un singolo testbench usando quell'interfaccia comune, e il testbench funzionerà con qualsiasi simulatore.
Quello che devo sapere è il modo migliore per caricare la libreria di un utente (che implementa il banco di prova) dalle comuni librerie di interfaccia del simulatore. Ci sono due modi che conosco:
- Richiede che la libreria dell'utente sia nominata in un modo noto. Possono modificare
LD_LIBRARY_PATH
in modo tale che la loro implementazione venga rilevata (e prima) quandodlopen()
ed. - Imposta il percorso completo della libreria utente disponibile in una variabile di ambiente conosciuta e
dlopen()
it.
Il primo è quello che mi è venuto subito in mente quando ho pensato al problema. Il secondo che ho visto lavorare prima, ma non mi piace perché può inquinare l'ambiente; modificare LD_LIBRARY_PATH
è altrimenti innocuo. Ci sono altri modi in cui questo può essere fatto? Quali sono i loro pro e contro?