2016-07-03 18 views
0

Ich habe gerade ein cross gdb kompiliert, indem ich die Quelle auf MSYS2/MINGW64 kompiliert habe. Aber wenn ich gdb läutete, es wirft einen Fehler und beschwert sich, dass es nicht starten kann, weil es libexpat-1.dll benötigt.Warum Cross gdb benötigt libexpat-1.dll?

Dies ist, was ich die GDB kompilieren tat:

  • den Quellcode Got git clone git://sourceware.org/git/binutils-gdb.git
  • In einem anderen Verzeichnis:

    • 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

    • und make && make install

Es kompiliert ohne Probleme. Aber ich weiß nicht, warum es die Bibliotheken benötigt, während ich es statisch kompiliert habe und die Shared Libraries deaktiviert habe.

Ich habe auch versucht, nicht libexpat während der Kompilierung zu verwenden, aber dann ist es über eine andere Bibliothek libiconv-2.dll.

Was habe ich vermasselt?

Edit: Ich hatte C:\msys64\mingw64\bin in meinem Weg nicht. Nach dem Hinzufügen bekomme ich den vorherigen Fehler nicht mehr.

Aber ich habe immer noch diese Frage, warum, obwohl ich die Bibliotheken statisch verknüpfen die endgültige binäre noch einige Bibliotheken benötigt?

+0

MSYS2 verfügt über drei verschiedene Shellumgebungen: die MSYS2-Shell, die MinGW-w64-Win64-Shell und die MinGW-w64-Win32-Shell. Welchen benutzen Sie? (d. h. was ist der Wert von "echo $ MSYSTEM"?) Wie genau führen Sie gdb aus und was ist die genaue Fehlermeldung, die Sie sehen? –

+0

Ich habe die ganze Sache aus MINGW-W64 Win64 Shell gebaut; '$ echo $ MSYSTEM' gibt' MINGW64' zurück. Ich öffne ein CMD-Fenster im Verzeichnis und führe 'x86_64-amd-linux-gnu-gdb.exe --version' aus. Der Fehler ist 'Das Programm kann nicht gestartet werden, weil libexpat-1.dll von Ihrem Computer fehlt. Versuchen Sie das Programm neu zu installieren, um dieses Problem zu beheben – Ali

Antwort

0

Der Grund, warum die letzte Binärdatei immer noch nach den Bibliotheken sucht, ist, dass ich die falschen Flags verwendet habe. Die Flags --disable-shared --enable-static geben nicht an, wie der aktuelle Build mit den Bibliotheken verknüpft werden soll, sie geben vielmehr an, wie der Code, der mit dieser Binärdatei kompiliert wird, mit anderen Bibliotheken verknüpft werden sollte.

Also, um die GDB binäre statisch zu machen Verknüpfung mit libexpat oder jede andere Bibliothek sollte man wie so

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

Mitteilung der LDFLAGS="-static" Flag konfigurieren verwenden. Es zwingt die endgültige binäre Verbindung statisch zu allen Bibliotheken und es wird nicht nach dll s suchen, wenn Sie es ausführen.