Domanda

Stiamo sviluppando un pacchetto software C ++ che dipende dalla libreria GNU readline e noi di solito costruisce utilizzando gcc (che richiede almeno la versione 4). Ora vorremmo quella di portare questo a Windows, ottenendo una versione collegata in modo statico, che siamo in grado di ridistribuire senza richiedere la compilazione dagli utenti.

Ho provato diversi approcci:

  • Building utilizzando Cygwin (senza andare con il readline fornito in combinazione con -mno-cygwin o un compilatore MinGW),
  • Costruzione usando MinGW e readline da GnuWin32 (dipendenze non risolte a stat64, che non ha potuto risolvere),
  • Costruzione usando MinGW e readline costruzione e pdcurses richiesti dalla sorgente (approccio più promettente, ha ottenuto ad un binario statico! Ma la shell interattiva ottenuto comportato in modo scorretto, per esempio backspace non è stato visualizzato).

Tutte le idee come si potrebbe ottenere uno degli approcci al lavoro?

È stato utile?

Soluzione

Dopo frustrazioni simili, ho appena compilato sia una versione a 32bit e 64bit di libreadline 6.2 utilizzando MinGW-W64 . Ecco il mio come ho fatto:

Layout del mio dev directory:

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

impostare alcune variabili d'ambiente per la compilazione a 32 bit:

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

termcap 1.3.1.
Eseguire lo script di configurazione:

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

Modifica termcap.c e fissare un paio di righe nella parte superiore. Il mio aspetto:

/* 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

e 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 */

Modifica del 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

Dopo quella chiamata make install e dovrebbe compilare senza avvisi o errori.

readline 6.2 < br> Impostare gli stessi CPPFLAGS e LDFLAGS variabili come con termcap prima di chiamare:

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

Modifica del Makefile:

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

make install dovrebbe ora compilare e installare readline!
Se si desidera una libreria a 64 bit, sostituire i686-W64-mingw32 con * x86_64-W64-mingw32 * e local32 con local64 .

Altri suggerimenti

MinGWEditLine biblioteca

Un'implementazione dell'API Editline per la Console nativo di Windows. Questa libreria con licenza BSD fornisce funzioni di editing e la storia della linea di comando simili a quelli trovati in GNU Readline.

funzioni readline principali sono implementate per la console nativo di Windows. BSD licenza.

GnuWin32 ha un porto di readline: http://gnuwin32.sourceforge.net/packages/readline htm

progetti non GPL, libedit ha un più accettabile di licenza [usi BSD licenze]

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top