Frage

Wir entwickeln ein C ++ Software-Paket, das auf dem GNU Readline-Bibliothek abhängig ist und wir in der Regel bauen gcc (erfordert mindestens Version 4). Nun möchten wir in den Hafen dieser auf Windows mögen, eine statisch gelinkte Version zu erhalten, die wir, ohne Kompilierung von Nutzern verteilen können.

Ich habe mehrere Ansätze versucht:

  • Gebäude Cygwin (geht nicht mit dem mitgelieferten Readline- kombiniert mit -mno-cygwin oder einem MinGW Compiler),
  • Bauen mit MinGW und Readline- von GnuWin32 (ungelösten Abhängigkeiten zu stat64, die ich nicht aufgelöst werden kann),
  • Bauen mit MinGW und den Aufbau readline- und erforderlich pdcurses von der Quelle (vielversprechendste Ansatz, erwischte einen statischen binären! Aber die erhaltene interaktiv Shell verhielten sich falsch, zum Beispiel Backspace wurde nicht sichtbar).

Alle Ideen, wie wir einen der Ansätze zur Arbeit bekommen könnten?

War es hilfreich?

Lösung

Nach ähnlichen Frustrationen, ich habe gerade beide kompiliert jetzt eine 32-Bit- und 64-Bit-Version von libreadline 6.2 unter Verwendung von MinGW-w64 . Hier ist mein, wie ich es tat:

Layout meines dev Verzeichnis:

c:\dev\msys
c:\dev\mingw32
c:\dev\local32
c:\dev\mingw64
c:\dev\local64

Set einiger Umgebungsvariablen für die 32-Bit-Build:

export CPPFLAGS=-I/c/dev/local32/include
export LDFLAGS=-L/c/dev/local32/lib

Termcap 1.3.1.
Führen Sie den Configure-Skript:

./configure --host=i686-w64_mingw32 --prefix=/c/dev/local32

Bearbeiten termcap.c und fix auf ein paar Zeilen an der Spitze. Mine sieht wie folgt aus:

/* Emacs config.h may rename various library functions such as malloc.  */
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#ifdef emacs

#include <lisp.h>       /* xmalloc is here */
/* Get the O_* definitions for open et al.  */
#include <sys/file.h>
#ifdef HAVE_FCNTL_H
#include <fcntl.h>
#endif
//#ifdef HAVE_UNISTD_H
#include <unistd.h>
//#endif

#else /* not emacs */

//#ifdef STDC_HEADERS
#include <stdlib.h>
#include <string.h>
#define bcopy(b1,b2,len) (memmove((b2), (b1), (len)), (void) 0)
//#else
//char *getenv ();
//char *malloc ();
//char *realloc ();
//#endif

und tparam.c

/* Emacs config.h may rename various library functions such as malloc.  */
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#ifdef emacs
#include "lisp.h"       /* for xmalloc */
#else

//#ifdef STDC_HEADERS
#include <stdlib.h>
#include <string.h>
//#else
//char *malloc ();
//char *realloc ();
//#endif

/* Do this after the include, in case string.h prototypes bcopy.  */
//#if (defined(HAVE_STRING_H) || defined(STDC_HEADERS)) && !defined(bcopy)
#define bcopy(s, d, n) memcpy ((d), (s), (n))
//#endif

#endif /* not emacs */

Ändern Sie die Makefile:

Line 23: CC = i686-w64-mingw32-gcc
Line 24: AR = i686-w64-mingw32-ar
Line 36: prefix = /c/dev/local32
Line 49: #oldincludedir = /usr/local

Nach diesem Aufruf make install und es sollte ohne Warnungen oder Fehler kompilieren.

Readline- 6.2 < br> Stellen Sie die gleichen CPPFLAGS und ldflags Variablen wie mit termcap vor dem Aufruf:

./configure --prefix=/c/dev/local32 --host=i686-w64-mingw32 --enable-static --enable-shared

Bearbeiten Sie die Makefile:

Line 40: AR = i686-w64-mingw32-ar

make install sollte nun kompilieren und installieren Readline-!
Wenn Sie eine 64-Bit-Bibliothek wollen, ersetzen Sie i686-w64-mingw32 mit * x86_64-w64-mingw32 * und local32 mit local64 .

Andere Tipps

Schauen Sie sich MinGWEditLine Bibliothek

Ein editline API-Implementierung für die native Windows-Konsole. Diese BSD-lizenzierte Bibliothek bietet Kommandozeileneditierung und Geschichte Funktionen ähnlich denen in GNU Readline gefunden.

Haupt Readline- Funktionen für die native Windows-Konsole implementiert. BSD-Lizenz.

gnuwin32 hat einen Hafen Readline-: http://gnuwin32.sourceforge.net/packages/readline HTM

für Nicht-GPL-Projekte, hat libedit eine akzeptable Lizenz [Verwendungen BSD Lizenzierung]

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top