• [^] # Re: Cargo.lock affligeant

    Posté par (site web personnel, Mastodon) . En réponse au lien Rewriting the GNU Coreutils in Rust. Évalué à 6.

    Vas-y, montre mois les binaires fait en C/C++ qui compilent statiquement boost, Gtk, Qt, et autres giga-lib, alors qu'ils n'utilisent que 3 fonctions de ces dernières.

    Bon, je vais faire fi du ton agressif et/ou hautain.
    Par curiosité, j'ai compilé ce code statiquement (hormis pour pthread qui refuse catégoriquement d'être compilé de la sorte) en utilisant la ligne suivante:

     c++ -o server server.cpp /usr/lib/x86_64-linux-gnu/libboost_iostreams.a /usr/lib/x86_64-linux-gnu/libboost_thread.a -lpthread
    

    Résultat, l'exécutable pèse 404Ko et la commande ldd me fournit:

     linux-vdso.so.1 (0x00007fff6e729000)
     libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fd6dc2d0000)
     libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fd6dc0ee000)
     libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fd6dc0d3000)
     libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd6dbee1000)
     /lib64/ld-linux-x86-64.so.2 (0x00007fd6dc34f000)
     libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fd6dbd92000)
    

    On voit donc bien que Boost est compilé statiquement.
    Le poids cumulé des deux archives est de 968Ko, le linker a donc bien fait son travail.

    Du coup, comme tu listais aussi Gtk, j'ai fait un petit code en GtkAda qui match le code le plus simple du site gtk-rs.

    with Gtk.Main;
    with Gtk.Window; use GtK.Window;
    with Ada.Text_IO;use Ada.Text_IO;
    With Ada.Exceptions; use Ada.Exceptions;
    procedure simple_gtk is
     main_window : Gtk_Window;
    begin
     Gtk.Main.Init;
     main_window := Gtk_Window_New;
     main_window.Set_Default_Size (320, 200);
     main_window.Set_Title ("Hello, World! ");
     main_window.show_all;
     Gtk.Main.Main;
    exception
     when Error : others => Put_Line("Ouuupppsss");
     Put_Line (Exception_Information(Error));
    end simple_gtk;

    L'exécutable, compilé avec les infos de debug, pèse, quant à lui, 3.6Mo mais ne peut pas être compilé entièrement en statique, il semblerait que compiler avec Gtk en statique ne soit pas recommandé.
    Le binaire dépend donc finalement de 47 bibliothèques dynamiques.

    Et enfin, à titre de comparaison, j'ai créé le Cargo suivant pour compiler le hello world, mentionné en lien plus haut, en Rust:

    [package]
    name = "simple-gtk"
    version = "0.1.0"
    authors = ["Blackknight"]
    edition = "2018"
    [dependencies]
    gtk = { git = "https://github.com/gtk-rs/gtk3-rs.git" }
    

    Tout compile bien en release.
    L'exécutable pèse 3.7Mo et dépend de 69 bibliothèques dynamique... Donc finalement, ce n'est pas statique non plus.
    Par contre, la compilation en debug produit un exécutable de... 109Mo avec les mêmes 69 libs.
    Du coup, là, je suis preneur d'informations pour qu'on m'explique la taille !