Ho lavorato su un pacchetto di librerie Haskell che richiede un dll e .lib personalizzati su Windows per parlare con alcune API del sistema operativo. Il .lib è collegato alla libreria con il campo extra-libraries
e la DLL è installata nella directory del pacchetto cabal con data-files
.Il .lib statico richiesto per la libreria di compilazione è richiesto anche per gli utenti della libreria?
Per qualche motivo (non sono un esperto di collegamento con qualsiasi mezzo, ma questo sembra strano) se creo un test eseguibile che utilizza il mio pacchetto (nel campo build-depends
), vuole collegarsi nello stesso. lib usato per compilare la libreria - anche se si tratta solo di chiamare le funzioni della libreria, non qualcosa che esponga il .lib. Ovviamente ha bisogno di accedere a .dll in fase di esecuzione, ma è normale. Anche il bisogno del .lib sembra strano.
Mi aspetto che il .lib sia già collegato al file .a generato da Cabal/GHC per la mia libreria al momento dell'installazione. Non è questo il caso? E se lo è, qualcuno può spiegare perché è così?
C'è un modo per forzare l'uso di 'ld -r' invece di' ar' per le librerie di vanilla? Ho provato ad aggiungere 'ld-options: -r' ma non sembra fare nulla (presumibilmente perché' ld' non viene usato?) –
@TomSavage No, penso che non sia possibile. Ma io non sono un esperto di cabala. – Yuras