2012-11-30 13 views
5

Sto usando mingw gcc e msys per creare un numero di utilità GNU. In passato, ho avuto un sacco di problemi causati da diversi eseguibili che richiedevano diverse versioni di libiconv, quindi per evitare il problema volevo collegare staticv staticamente agli eseguibili iconv.Come faccio a collegare static v su windows usando msys?

Ho costruito libiconv utilizzando mingw e msys con configure --enable-static. Questo crea sia la DLL, la libreria di importazione .dll.a che la libreria .st statica.

Tuttavia, quando provo a creare un altro programma che si collega con un semplice -liconv, ottengo la DLL collegata. Suppongo che ld stia per qualche ragione preferendo la libreria di importazione sulla libreria statica (non una cattiva scelta in generale, questo è un caso speciale).

Come posso garantire che i programmi che creo siano collegati staticamente? Un approccio ovvio è semplicemente quello di rimuovere il file .dll.a durante la creazione. Questa è probabilmente l'opzione più semplice, ma sono curioso - c'è una flag linker che posso impostare (tramite qualcosa come LDFLAGS) per forzare l'icong ad essere caricato staticamente (idealmente, senza influenzare le altre librerie, ma a un certo punto sarei OK con il caricamento statico di tutte le librerie)

risposta

1

Hai ragione, per impostazione predefinita collegherà "condiviso" a meno che tu non specifichi specificamente il collegamento statico. Si può fare questo un paio di modi, a seconda di quale funziona per voi

make CC='gcc -static' 
make LDFLAGS=-static 
make LDFLAGS=libiconv.a 

Hai solo bisogno di guardare il Makefile e trovare il modo meno invasivo per adattarsi in.

Example

+0

Presumibilmente i primi due collegherà * tutto * staticamente, mentre il terzo collega solo iconv staticamente (e altre librerie come zlib continueranno a collegarsi alla dll). –

+0

oppure '-Wl, -Bstatic, -liconv' –

Problemi correlati