Je ne parviens pas à comstackr des applications GTK + 32 bits sur Linux 64 bits, en particulier Ubuntu 10.04. Comstackr des applications GTK + 64 bits fonctionne bien, et tout est configuré pour comstackr des applications 32 bits également, mais cela ne fonctionne pas avec GTK +
J’ai un programme de test très simple que j’utilise pour le dépannage, qui est simplement un gtk_init et un gtk_main, qui comstack bien en tant que -m64. Je comstack avec gcc 4.6.2 en l’appelant avec:
gcc -m32 gtktest.c `pkg-config --cflags gtk+-2.0` `pkg-config --libs gtk+-2.0`
Voici les deux types de messages d’erreur que je reçois:
/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.6.2/../../../../x86_64-unknown-linux-gnu/bin/ld: warning: libXext.so.6, needed by /usr/lib/../lib32/libgtk-x11-2.0.so, not found (try using -rpath or -rpath-link)
et
/usr/lib/../lib32/libgdk-x11-2.0.so: undefined reference to `XmbSetWMProperties'
Gardez à l’esprit que ce ne sont pas les seules erreurs, je viens d’inclure les deux types spécifiques à titre de référence et pour faire court, je reçois des erreurs pour toute la stack de bibliothèques GTK +.
J’ai toutes les versions 32 bits appropriées des bibliothèques dans mes dossiers lib32.
J’espère que quelqu’un a déjà eu ce problème et qu’il peut m’aider, cela me cause vraiment beaucoup de maux de tête, et je ne peux pas beaucoup vous aider, même sur Internet.
S’il vous plaît demander s’il y a toute autre information que vous devez me fournir pour aider à diagnostiquer ce problème.
Note: J’ai les paquets ia32-libs et gcc-multilib. Ubuntu 10.04 n’a pas de paquets ia32-libs-gtk distincts, mais je pense qu’ils sont encapsulés dans les paquets ia32-libs. Ils sont tous présents sur mon système.
Je pense que cela doit être une sorte de problème de configuration d’éditeur de liens. J’ai récemment construit le nouveau compilateur Free Pascal et un compilateur croisé 32 bits, et j’ai également mis à niveau GCC vers la version 4.6.2 pour tirer parti de certaines des nouvelles fonctionnalités C ++ et des correctifs apportés à la prise en charge de C99. La valeur par défaut 4.4.3 GCC existe toujours sur mon système. Je pense que le problème a été introduit lors de l’installation d’un nouveau binutils, car j’avais déjà utilisé Clang et LLVM comme chaîne d’outils et que je voulais utiliser des plug-ins. Je me suis donc dit que je pourrais aussi bien les mettre à niveau.
Tout fonctionne bien pour la compilation de programmes 64 bits, les nouveaux outils ne posent aucun problème et je peux comstackr des programmes 32 bits, mais lorsque vient le temps de lier explicitement quelque chose, j’ai des problèmes.
Je sais que mon ensemble actuel de bibliothèques est approprié, et Free Basic est installé, il n’émet que du code 32 bits et j’ai pu créer des programmes GTK + 32 bits sans problème avant cette mise à niveau.
Il suffit de se demander si quelqu’un a des idées sur la configuration qui aurait pu être modifiée dans cette mise à niveau ou si cela leur est déjà arrivé auparavant? Je devrais vraiment passer à une nouvelle dissortingbution pour pouvoir profiter de tous les nouveaux logiciels sans avoir à pirater tous mes paquets, mais malheureusement, un bogue dans les nouveaux kernelx empêche mon ordinateur de revenir en mode veille. C’est un ordinateur portable que j’utilise pour des projets personnels. Une bonne gestion de l’alimentation est donc très importante. Ce n’est pas une perte énorme si je bloque le système, à part que je l’ai configuré pour mon stream de travail.
Je pense que vous devez installer les paquets ia32-libs-gtk
et gcc-multilib
, et vous devez comstackr et lier avec gcc -m32
comme vous le faites déjà.
Le package GTK dans 12.04 ne semble pas fonctionner correctement avec multiarch. Vous pouvez contourner ce problème sur Ubuntu 12.04 en créant les liens symboliques suivants:
sudo ln -s /lib/i386-linux-gnu/libglib-2.0.so.0 /usr/lib32/libglib-2.0.so sudo ln -s /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so.0 /usr/lib32/libgtk-x11-2.0.so sudo ln -s /usr/lib/i386-linux-gnu/libgdk-x11-2.0.so.0 /usr/lib32/libgdk-x11-2.0.so sudo ln -s /usr/lib/i386-linux-gnu/libatk-1.0.so.0 /usr/lib32/libatk-1.0.so sudo ln -s /usr/lib/i386-linux-gnu/libpangox-1.0.so.0 /usr/lib32/libpangox-1.0.so sudo ln -s /usr/lib/i386-linux-gnu/libpango-1.0.so.0 /usr/lib32/libpango-1.0.so sudo ln -s /usr/lib/i386-linux-gnu/libgmodule-2.0.so.0 /usr/lib32/libgmodule-2.0.so sudo ln -s /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 /usr/lib32/libgobject-2.0.so sudo ln -s /usr/lib/i386-linux-gnu/libgdk_pixbuf-2.0.so.0 /usr/lib32/libgdk_pixbuf-2.0.so
J’ai trouvé la réponse dans ce fil de discussion: http://www.blitzbasic.com/Community/posts.php?topic=101357
Alternativement (probablement mieux), vous pouvez laisser le système de base intact et mettre à jour votre lien pour rechercher par nom de fichier au lieu de nom de bibliothèque. Quelque chose comme:
gcc -m32 gtktest.c `pkg-config --cflags gtk+-2.0` -L/usr/lib/i386-linux-gnu -l:libgio-2.0.so.0 ...
Ce n’est pas génial. Vous devrez append un -l:
pour chaque bibliothèque que l’éditeur de liens ne peut pas trouver et votre construction sera interrompue si le nom du fichier de la bibliothèque change.
Vous pouvez indiquer à pkg-config de rechercher les bibliothèques 32 bits avec la variable d’environnement PKG_CONFIG_PATH. Pour Ubuntu,
export PKG_CONFIG_PATH=/usr/lib32/pkgconfig:$PKG_CONFIG_PATH
Pour Redhat,
export PKG_CONFIG_PATH=/usr/lib/pkgconfig:$PKG_CONFIG_PATH