2016-07-03 1 views
0

Je viens de compiler un gdb croisé en compilant la source sur MSYS2/MINGW64. Mais quand j'appelle gdb il jette une erreur et se plaint qu'il ne peut pas démarrer car il a besoin de libexpat-1.dll.Pourquoi Cross gdb a besoin de libexpat-1.dll?

C'est ce que je l'ai fait pour compiler le gdb:

  • Vous avez le code source git clone git://sourceware.org/git/binutils-gdb.git
  • Dans un autre répertoire:

    • export TARGET=x86_64-amd-linux-gnu
    • export PREFIX=/tmp/myToolChain
    • binutils/gdb/path/configure --with-python=/mingw64/bin/python --target=${TARGET} --prefix=${PREFIX} --disable-shared --enable-static

    • et make && make install

Il compile sans aucun problème. Mais je ne sais pas pourquoi il a besoin des bibliothèques alors que je l'ai compilé de manière statique et désactivé les bibliothèques partagées.

J'ai également essayé de ne pas utiliser libexpat lors de la compilation, mais alors il se rapproche d'une autre bibliothèque libiconv-2.dll.

Qu'est-ce que j'ai foiré?

Modifier: Je n'avais pas C:\msys64\mingw64\bin dans mon chemin. Après l'avoir ajouté, je ne reçois plus l'erreur précédente.

Mais j'ai encore cette question que pourquoi bien que je lie statiquement les bibliothèques le binaire final a besoin encore de quelques bibliothèques?

+0

MSYS2 dispose de trois environnements de shell différents: le shell MSYS2, le shell MinGW-w64 Win64 et le shell MinGW-w64 Win32. Lequel utilisez-vous? (c'est-à-dire quelle est la valeur de 'echo $ MSYSTEM'?) Comment exactement exécutez gdb et quel est le message d'erreur exact que vous voyez? –

+0

J'ai construit l'ensemble de MINGW-W64 Win64 shell; '$ echo $ MSYSTEM' renvoie' MINGW64'. J'ouvre une fenêtre CMD dans le répertoire puis exécute 'x86_64-amd-linux-gnu-gdb.exe --version'. L'erreur est 'Le programme ne peut pas démarrer car libexpat-1.dll est absent de votre ordinateur. Essayez de réinstaller le programme pour résoudre ce problème. – Ali

Répondre

0

La raison pour laquelle le binaire final recherche toujours les bibliothèques est que j'utilisais les mauvais indicateurs. Les indicateurs --disable-shared --enable-static ne spécifient pas comment la construction en cours doit être liée aux bibliothèques, elle spécifie plutôt comment le code qui est compilé avec ce binaire doit être lié à d'autres bibliothèques.

Ainsi, afin de faire le lien statique binaire avec gdb libexpat ou toute autre bibliothèque on doit utiliser configurer comme si

/binutils/gdb/path/configure --target=${TARGET} --prefix=${PREFIX} LDFLAGS="-static" 

avis drapeau LDFLAGS="-static". Il force statiquement le lien binaire final à toutes les bibliothèques et ne recherchera pas dll lorsque vous l'exécuterez.