2017-10-20 7 views
0

J'ai un petit jeu que je veux distribuer, mais je veux l'expédier avec toutes les bibliothèques partagées nécessaires afin que les utilisateurs n'aient aucune dépendance à installer.Quelles bibliothèques partagées pour un jeu (linux)?

C'est la sortie de ldd:

linux-vdso.so.1 (0x00007fff311c4000) 
    libm.so.6 => /usr/lib/libm.so.6 (0x00007fcca3449000) 
    libdl.so.2 => /usr/lib/libdl.so.2 (0x00007fcca3245000) 
    libGL.so.1 => /usr/lib/libGL.so.1 (0x00007fcca2fba000) 
    libGLEW.so.2.1 => /usr/lib/libGLEW.so.2.1 (0x00007fcca2d12000) 
    libSDL2-2.0.so.0 => /usr/lib/libSDL2-2.0.so.0 (0x00007fcca29f6000) 
    libSDL2_image-2.0.so.0 => /usr/lib/libSDL2_image-2.0.so.0 (0x00007fcca27d3000) 
    libSDL2_ttf-2.0.so.0 => /usr/lib/libSDL2_ttf-2.0.so.0 (0x00007fcca25cb000) 
    libSDL2_mixer-2.0.so.0 => /usr/lib/libSDL2_mixer-2.0.so.0 (0x00007fcca237c000) 
    libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007fcca215e000) 
    libc.so.6 => /usr/lib/libc.so.6 (0x00007fcca1da7000) 
    /lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007fcca3a68000) 
    libGLX.so.0 => /usr/lib/libGLX.so.0 (0x00007fcca1b75000) 
    libX11.so.6 => /usr/lib/libX11.so.6 (0x00007fcca1836000) 
    libXext.so.6 => /usr/lib/libXext.so.6 (0x00007fcca1624000) 
    libGLdispatch.so.0 => /usr/lib/libGLdispatch.so.0 (0x00007fcca136e000) 
    librt.so.1 => /usr/lib/librt.so.1 (0x00007fcca1166000) 
    libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x00007fcca0ea0000) 
    libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00007fcca0c77000) 
    libbz2.so.1.0 => /usr/lib/libbz2.so.1.0 (0x00007fcca0a67000) 
    libpng16.so.16 => /usr/lib/libpng16.so.16 (0x00007fcca0830000) 
    libz.so.1 => /usr/lib/libz.so.1 (0x00007fcca0619000) 
    libharfbuzz.so.0 => /usr/lib/libharfbuzz.so.0 (0x00007fcca0380000) 
    libXau.so.6 => /usr/lib/libXau.so.6 (0x00007fcca017c000) 
    libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00007fcc9ff76000) 
    libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x00007fcc9fc63000) 
    libgraphite2.so.3 => /usr/lib/libgraphite2.so.3 (0x00007fcc9fa37000) 
    libpcre.so.1 => /usr/lib/libpcre.so.1 (0x00007fcc9f7c4000) 

Comment puis-je savoir quels sont ceux qui viennent par défaut sur une distro linux et ceux qui devrais-je expédier mon jeu?

+1

Toutes les distributions modernes auront tous disponibles. –

+0

Ils seront disponibles, très probablement, mais pas nécessairement dans les versions listées –

Répondre

0

Il y a une raison pour laquelle il est si courant de distribuer des applications Linux/Unix en tant que code source, et non des binaires - il est très difficile de distribuer des binaires fonctionnant sur un large éventail de plates-formes. C'est la même raison pour laquelle les référentiels de logiciels spécifiques à la distribution sont une telle caractéristique de la vie Linux.

Le problème est que, bien que les bibliothèques que vous listez soient généralement disponibles, leurs versions différeront de la distribution à la distribution. Et c'est pour ignorer le problème fondamental que Linux tourne sur différents processeurs et architectures matérielles. Si votre programme est susceptible d'être d'intérêt général, le moyen le plus simple (techniquement au moins) de gérer l'approvisionnement est de rendre le code source disponible, par exemple sur github, et de convaincre les responsables de la distribution de le construire pour leur distributions. Les mainteneurs de Distro ont des moyens automatisés de faire ce genre de chose.

Si vous ne pouvez pas faire cela, alors je suggère que vous pourriez avoir besoin de distribuer avec votre exécutable tout à l'exception des bibliothèques C standard et des bibliothèques de plate-forme. Autrement dit, vous pouvez supposer la compatibilité dans les bibliothèques C, libdm, libpthread et libm; tout ce que vous aurez besoin de fournir. Vous pouvez fournir les bibliothèques en tant que fichiers séparés, avec une sorte de script ou de wrapper qui définit LD_LIBRARY_PATH pour les rendre disponibles, ou simplement les lier dans l'exécutable. Franchement, il pourrait y avoir des incompatibilités même dans les bibliothèques de plate-forme si le système hôte est beaucoup plus ancien ou plus récent que le système de construction.

Ou vous pouvez avoir votre application charger des bibliothèques à l'exécution, et avoir une sorte de logique qui tente de trouver ceux qui sont appropriés dans le système hôte. Et, vraisemblablement, vérifie la compatibilité. C'est ce que font généralement les JVM Java.

Ce qui ne fonctionnera pas très bien est de construire votre application sur une distribution Linux, et espérons que cela fonctionnera pour les autres. Malheureusement.