Статически связанная, правильно работающая библиотека чтения под Windows?

StackOverflow https://stackoverflow.com/questions/4737082

Вопрос

Мы разрабатываем программный пакет C ++, который зависит от библиотеки чтения GNU, и мы обычно создаем с помощью GCC (требуя хотя бы версии 4). Теперь мы хотели бы перенести это в Windows, получая статически связанную версию, которую мы можем перераспределить, не требуя компиляции пользователями.

Я попробовал несколько подходов:

  • Строительство с использованием cygwin (не Go с предоставленной линией чтения в сочетании с -mno-cygwin или компилятор Mingw),
  • Строительство с использованием Mingw и READLINE от GNUWIN32 (неразрешенные зависимости от STAT64, которые я не смог разрешить),
  • Строительство с использованием Mingw и строительного чтения и требовалось PDCurses из источника (наиболее многообещающий подход, достиг статического двоичного файла! Но полученная интерактивная оболочка вела себя неправильно, например, BackSpace не визуализировалась).

Есть идеи, как мы могли бы получить один из подходов к работе?

Это было полезно?

Решение

После аналогичных разочарований я только сейчас собрал 32 -битную и 64 -битную версию Libreadline 6.2, используя Mingw-W64. Анкет Вот мой, как я это сделал:

Макет моего девчонка каталог:

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

Установите некоторые переменные среды для 32 -битной сборки:

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

Термин 1.3.1.
Запустите скрипт Configure:

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

Изменить Termcap.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>       /* 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

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

Измените 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

После этого звонка сделать установку и он должен компилировать без предупреждений или ошибок.

Линия чтения 6.2
Установите те же переменные CPPFLAGS и LDFLAGS, что и с TermCAP перед вызовом:

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

Отредактируйте Makefile:

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

сделать установку Теперь должен собирать и установить Rideline!
Если вы хотите библиотеку 64 -битной, замените I686-W64-Mingw32 с * x86_64-W64-Mingw32 * и местный 32 с местный 64.

Другие советы

Проверить Библиотека Mingweditline

Реализация EditLine API для нативной консоли Windows. Эта библиотека, лицензированная на BSD, предоставляет функции редактирования командной строки и историю, аналогичные тем, которые можно найти в GNU Readline.

Основные функции чтения реализованы для нативной консоли Windows. Лицензия BSD.

GNUWIN32 имеет порт чтения: http://gnuwin32.sourceforge.net/packages/readline.htm

Для проектов, не являющихся GPL, Libedit имеет более приемлемое лицензирование [использует лицензирование BSD

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top