Portál AbcLinuxu, 17. července 2025 11:35

Gtk# pro Windows x64

16.9.2008 13:31 | Přečteno: 1090× | Jiné | poslední úprava: 19.9.2008 13:32

Pokračování 2 předešlých zápisků.
Ha! Tak se mi podařilo zfunkčnit Gtk# (2.12) pro Windows x64 s 64 bitovými Gtk knihovnami. Tady je poněkud těžkopádný postup, jak jsem to udělal.

Vynechám omyly, takže jen postup jak toho docílit (Rozhodl jsem se nekompilovat buildsystémem, protože chce cygwin): Stáhnout zdrojáky GtkSharp ze SVN. Stáhnout x86_64 balíček gtk-sharp z repozitářů ArchLinuxu (či jiné distribuce, dokonce může být i 32bit, protože .NET knihovny nejsou vázány architekturou). Z balíčků ArchLinuxu "ukradneme" soubory atk-sharp.dll, gdk-sharp.dll, glib-sharp.dll, pango-sharp.dll, gtk-sharp.dll a gtk-dotnet.dll. Dále ukradneme gapi_codegen.exe, atk-api.xml, gdk-api.xml, glib-api.xml, gtk-api.xml a pango-api.xml. Xml soubory umístíme do složek atk, gdk, glib, gtk a pango ve zdrojácích ze svn (ušetří nám to použití parseru). Dále do adresářové struktury zkopčíme mnou vytvořené makefile soubory nevyžadující cygwin ani msys. Pak v kořenovém adresáři zdrojáků spustíme make, které nám (s pomocí mingw-w64) vytvoří *glue*.dll soubory, na kterých jsou ty .NET knihovny závislé (jsou tam nějaké wrapper fce pro gtk).

Vytvoříme nový projekt ve Visual C# Express (či Standard, Professional, podle toho, co máte). Do "binary output directory" zkopčíme *-sharp.dll a *glue*.dll soubory, klikneme pravým na projekt, vybereme "Add reference", záložka browse a vybereme (JEN) *-sharp.dll soubory (je jich 5). Do zdrojáku programu pak napíšeme následující kód, zkompilujeme a je to :-)

using System;
using Gtk;

namespace GtkSharpTest2
{
    class Program
    {
        static void Main(string[] args)
        {
            Application.Init();

            Button btn = new Button("Hello world");
            btn.Clicked += new EventHandler(hello);
            Window window = new Window("Hello world");
            window.DeleteEvent += delete_event;

            window.Add(btn);
            window.ShowAll();

            Application.Run();
        }

        static void delete_event(object obj, DeleteEventArgs args)
        {
            Application.Quit();
        }

        static void hello(object obj, EventArgs args)
        {
            Console.WriteLine("Hello world");
        }
    }
}

Binárky (*glue*.dll) a vlastní Makefile zveřejním na požádání (zdarma). Teď ještě Cairo pro C# (asi také z balíčku ArchLinuxu) - snad nebude chtít žádné glue soubory :-) a nějaké ty závislosti pro Banshee a pak samotné banshee (to jsem teda zvědavý).

Update:

Binárky zde. O makefile musí někdo požádat :-)

Update 2:

Tak jsem ještě zkompiloval libglade (+ libxml2 a iconv, na kterých závisí), gtksharpglue-2.dll a opět ukradl glade-sharp.dll z toho balíčku :-) Někdy zítra to celé včetně 64bit gtk zabalím a zveřejním, ať stačí stáhnout all-in-one balíček a né 20 věcí zvlášť.

Update 3:

Ouvej. O svém výtvoru jsem informoval vývojáře na mailing listu Gtk# a tam mi řekli, že není dobré vzít knihovny z linuxu, protože prý jsou vytvořené s tím, že sizeof(long) = 8 a právě proto, že tam je ten parser, že to správně převede podle platformy. Takže sice mi to funguje, ale jen do té doby, než ta .NET knihovna zavolá funkci, která bere long. Rozhodl jsem se teda rekompilovat i .NET knihovny. Zatím mám glib-sharp, Mono.Cairo (na to jsem před tím zapomněl, může to vyžadovat pango-sharp při určitých volání) a pango-sharp. Zbytek po pauze a pak slíbený upload.

Update 4:

Už jen gtkdotnet.dll a cairo-sharp.dll. Slíbený upload udělám asi až zítra, dneska to už nestíhám, musím také dělat něco jiného než sedět u PC (např. koukat na telku :-)).

Update 5

Hmm. Tak teď na tom mailing listu z někoho vylezlo, že při kompilaci toho jejich generátoru musím definovat WIN64LONG, jinak budu přesně tam, kde jsem byl s těma knihovnama z linuxu. Naneštěstí to pak při kompilaci gtk-sharp.dll dělá neplechu a mlátí se tam int s longem v jednom zdrojáku. Nahlásil jsem to a snad brzy to bude spraveno. Do té doby asi nemá cenu uploadovat ty knihovny, protože to kdykoliv může upsnout.

Update 6 - critical bug in Gtk#

Pánové z týmu Gtk# si špatně vyložili typ gsize a na windows x64 jej interpretují jako long a jen náhodou jsem na něj narazil při mých hrátkách. Projeví se např. při použití gtk_text_buffer_serialize a následném volání callback funkce GtkTextBufferSerializeFunc, která 5 parametr očekává gsize, ale pánové od Gtk# se rozhodli tam strčit UIntPtr na Win32 (stejná velikost, tak budiž a berme to jako ok), ale uint na Win64, což může mít kritické následky. Určitě tam toho bude víc. Problém jsem ohlásil na mailing listu a bugzille. Líp jsem to popsat nedokázal.

Update 7 :-)

Snad předposlední update (poslední bude, až to uploadnu .. a nebo možná vytvořím nový zápis, uvidím). Zmíněný bug byl celkem rychle opraven v SVN trunku a knihovny jsem zkompiloval. Ještě test a zítra to snad už uploadnu, pokud zase něco nenajdu :-)

Update 8

Stručné info a odkaz ke stáhnutí: http://jarduvblocek.blogspot.com/2008/09/gtk-for-windows-x64.html.

       

Hodnocení: 50 %

        špatnédobré        

Obrázky

Gtk# pro Windows x64, obrázek 1 Gtk# pro Windows x64, obrázek 2

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

pol128 avatar 16.9.2008 15:01 pol128 | skóre: 18
Rozbalit Rozbalit vše Re: Gtk# pro Windows x64
Odpovědět | Sbalit | Link | Blokovat | Admin
to je nejaka logicka hadanka alebo mi nieco unika? naco je linuxakom makefile pre kompilaciu niecoho pre windows?
Jardík avatar 16.9.2008 15:04 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Gtk# pro Windows x64
To je třeba pro ty, co mají i windows a chtějí, aby jejich Gtk# program, co napsali pro linux, fungoval i ve Windows.
Věřím v jednoho Boha.
16.9.2008 19:36 Ignac
Rozbalit Rozbalit vše Re: Gtk# pro Windows x64
Odpovědět | Sbalit | Link | Blokovat | Admin
Hmmm, ten .NET nevypada spatne
17.9.2008 12:23 Karel
Rozbalit Rozbalit vše Re: Gtk# pro Windows x64
Jj, daaaaleko lepsi nez Java, pro desktop urcite
Grunt avatar 17.9.2008 21:03 Grunt | skóre: 23 | blog: Expresivní zabručení | Lanžhot
Rozbalit Rozbalit vše Re: Gtk# pro Windows x64
Odpovědět | Sbalit | Link | Blokovat | Admin
Zcela zmaten. Co by dělali v Linuxové distribuci nějaké DLL knihovny a EXáčE?
Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
Jardík avatar 17.9.2008 21:47 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Gtk# pro Windows x64
To jsou .NET knihovny a .NET exáče. Nejsou to "opravdové" DLLka a EXE, ale assemblies (jak to přeložit). Je to něco jako s java programy, akorát je ten .NET (alespoň podle mého) o dost rychlejší.
Věřím v jednoho Boha.

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.