Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Cygwinissä käännetyn ohjelman linkkeröinti staattisesti

Turakointi [05.06.2021 23:33:03]

#

Kirjoitin tällaisen vielä erittäin varhaisessa alpha-vaiheessa olevan, omaa IRC-protokollan kanssa taaksepäin yhteensopivaa protokollaa käyttävän IM/VoIP-softan, jonka testiversion voi ladata täältä, jos kiinnostaa: http://sininenankka.dy.fi/~sami/chattest.zip (riippuvuuksina libopus, GTK+-3.0, SDL2)

Tuo kääntyy sellaisenaan myös Windows-ohjelmaksi Cygwinissä. MinGW:llä kääntäminen ei onnistu, koska tuo käyttää UNIX-tyylisiä socketteja ja poll()-kutsua. Cygwin-versio kuitenkin näyttäisi toimivan kaikilta osiltaan aivan kuten kuuluukin.

Haluaisin paketoida Cygwin-version jotenkin niin, että käyttäjä voisi vain ladata zipin ja yhden exe-päätteisen ohjelmabinäärin ajamalla saisi ohjelman toimimaan. Ilmeisesti pitäisi linkkeröidä kaikki ohjelman tarvitsemat kirjastot staattisesti binääriin, mutta ensin pitäisi saada ne staattiset versiot jostain tai käännettyä ne itse. Olen yrittänyt etsiä vastauksia Googlella, mutta Google ei löydä juuri mitään Cygwiniin liittyvää. Pari Cygwinin omaa DLL-tiedostoa pitää laittaa samaan kansioon ohjelmabinäärin kanssa, koska niitä ei voi linkata staattisesti, mutta se ei ole ongelma. Myös jonkinlainen x-serveri pitäisi paketoida mukaan tai sitten käyttää löytää GTK-kirjastosta Windowsin ikkunointiapia käyttävä versio.

Kaikki neuvot ovat tervetulleita.

Metabolix [06.06.2021 00:57:05]

#

Miksi pitää linkittää staattisesti? Eikö riitä, että laitat vain DLL:t samaan paikkaan? Jos kuitenkin niitä jo Cygwinin takia tulee, saman tien voi laittaa kaikki.

Kannattaa selvittää ihan natiivin version kääntämistä vielä. En ole aikoihin tehnyt socketteja käsipelillä, mutta kyllähän Winsock2 sisältää lähes samat funktiot peruskäyttöä ajatellen, eli pienellä kikkailulla tai valmiilla wrapperilla luulisi selviävän siitä. Gtk:sta löytyy myös Mingw- eli MSYS2-ohje.

Turakointi [06.06.2021 01:30:18]

#

Tuo ohjelma myöskin pollaa soketteja, ja se ei ole mahdollista Windowsin soketeilla, koska ne eivät ole samanlaisia yleiskäyttöisiä tiedostodeskriptoreja kuin Unixissa.

Metabolix [06.06.2021 18:57:07]

#

Kuulostaa oudolta. Mitä WSAPoll sitten tekee? Minusta sen dokumentaatio näyttää ihan samalla kuin Linuxin poll-funktion. Toki netistä löytyy valitusta tämän jostain bugista. Itse en muista poll-funktiota tarkemmin, usein on käytetty select-funktiota, joka toimii myös Windowsissa kai ihan hyvin. Nykyään näköjään suositaan eventtejä, mutta näissä on kuitenkin Windowsissa ihan eri systeemi kuin muualla.

Tietysti sitten jos "UNIX-tyylinen socket" tarkoittaakin paikallisia UNIX-socketteja (AF_UNIX jne.), puhutaan ihan eri asiasta, mutta yllättäen näköjään myös UNIX-socketit on tuotu Windowsiin!

Turakointi [07.06.2021 00:38:48]

#

Jotenkin tuntuisi helpoimmalta vain paketoida se ohjelma Cygwinin tiedostojen kanssa, kun se kerran kuitenkin kääntyy sellaisenaan Cygwinissä toimivaksi ohjelmaksi. Käytin jo tuossa pari päivää Winsockin opiskeluun ja kirjoitin muutamasta funktiosta Winsock-versiot, mutta aina tuli uusia esteitä vastaan ja mielenkiinto asiaan loppui toistaiseksi kesken.

Metabolix [07.06.2021 09:36:08]

#

Jaa, no jokainen tekee ratkaisunsa. Silti Cygwinin käyttö vain muutaman socket-funktion takia vaikuttaa melko yliampuvalta. Luulisi olevan helpompaa käyttää jotain verkkokirjastoa. Samalla voisi välttää bugeja, joita matalan tason socketeilla helposti tulee.

Paketoimisesta: Helpoin tapa DLL-tilanteen selvittämiseen on se, että keräät ohjelman kaipaamia tiedostoja, kunnes tulee jokin konkreettinen ongelma, jota voi sitten lähteä tutkimaan. Tosiaan ei pitäisi olla tarvetta linkittää staattisesti, ja myös WinAPI toimii, eli pitäisi olla mahdollista käyttää GTK:n Windows-versiota. X:n paketointi järkevästi lienee vaikeampaa, jos sen joutuu käynnistämään erikseen.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta