Olen kääntänyt ohjelman, johon on linkitetty useita dll-tiedostoja.
Käännöskomento, jolla syntyy yksi dll-tiedosto liitettäväksi toiseen osaan ohjelmaa:
g++ -o koottukirjasto.dll -shared omakoodi.o -L. -lkirjasto1 -lkirjasto2
Kuitenkin kun käännän koko ohjelman komennolla:
g++ -o ohjelma -shared ohjelma.o -L . -lkoottukirjasto
niin ohjelma kääntyy ja linkittyy ok mutta ohjelma vaatii ajonaikana toimiakseen tuon koottukirjasto.dll - tiedoston lisäksi MYÖS alkuperäiset kirjasto1.dll ja kirjasto2.dll.
Miten saisin koottukirjasto.dll:n käännettyä siten, että se ei riippuisi noista alkuperäisistä tiedostoista ja ajonaikana riittäisi vain tuo yksi dll-tiedosto?
Totta kai se vaatii myös aikaisemmat dll:t. Ne on vain linkitetty luomaasi dll-tiedostoon. Jos haluat päästä alkuperäisistä dll-kirjastoista "eroon", tulee sinun linkittää ne omaan dll-kirjastoosi staattisina kirjastoina.
Alkuperäisistä kirjastoista kuitenkin on vain harvoin staattisesti linkitettäviä käännöksia, joten joudut todennäköisesti kääntämään kirjastot uudestaan sorsista (oletan, että kyseessä on OpenSource). Näissä on yleensä tehty mahdolliseksi staattisesti linkittyvän kirjaston kääntäminen (#define _STATIC_LIB tjsp.).
Noita valmiina tulleita dll-tiedostoja ei siis voi kääntää staattisesti omaan käännökseen?
Mistä tunnistan alkuperäisestä paketista staattisesti linkitettävän käännöksen jos siellä vaikka sellainen olisi?
Erilainen tiedostopääte?
Jos paketti sisältää .lib -tiedostoja, niin staattinen käännös on REILUSTI dynaamista isompi (.lib -tiedosto voi olla useita, jopa kymmeniä megoja suuri).
Aihe on jo aika vanha, joten et voi enää vastata siihen.