9

GNUreadlineライブラリに依存するC++ソフトウェアパッケージを開発しており、通常はgccを使用してビルドします(少なくともバージョン4が必要です)。次に、これをWindowsに移植して、静的にリンクされたバージョンを取得します。これにより、ユーザーによるコンパイルを必要とせずに再配布できます。

私はいくつかのアプローチを試しました:

  • -mno-cygwinCygwinを使用して構築する(提供されているreadlineをMinGWコンパイラと組み合わせて使用​​することはできません)。
  • MinGWとGnuWin32からのreadlineを使用したビルド(stat64への未解決の依存関係。解決できませんでした)、
  • MinGWを使用してビルドし、ソースからreadlineと必要なpdcursesをビルドします(最も有望なアプローチは静的バイナリになりました!しかし、取得したインタラクティブシェルは正しく動作しませんでした。たとえば、バックスペースが視覚化されませんでした)。

アプローチの1つを機能させる方法について何かアイデアはありますか?

4

3 に答える 3

4

同様のフラストレーションの後、私はちょうど今、 MinGW-w64を使用してlibreadline6.2の32ビットバージョンと64ビットバージョンの両方をコンパイルしました。これが私のやり方です:

私の開発ディレクトリのレイアウト:

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

termcap1.3.1。
構成スクリプトを実行します。

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

その後、make installを呼び出すと、警告やエラーなしでコンパイルされます。

readline 6.2
呼び出す前に、termcapと同じCPPFLAGS変数とLDFLAGS変数を設定します。

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

Makefileを編集します。

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

make installは、readlineをコンパイルしてインストールする必要があります。
64ビットライブラリが必要な場合は、i686-w64-mingw32x86_64-w64-mingw32に、local32local64に置き換えます。

于 2011-03-14T07:55:50.450 に答える
2

MinGWEditLine ライブラリを確認してください

ネイティブ Windows コンソールの EditLine API 実装。この BSD ライセンスのライブラリは、GNU Readline に見られるものと同様のコマンド ライン編集機能と履歴機能を提供します。

主な readline 関数は、ネイティブ Windows コンソール用に実装されています。BSD ライセンス。

于 2011-04-12T20:46:36.273 に答える
0

gnuwin32 には readline のポートがあります: http://gnuwin32.sourceforge.net/packages/readline.htm

非 GPL プロジェクトの場合、libedit にはよ​​り受け入れ可能なライセンスがあります [BSD ライセンスを使用]

于 2011-02-10T13:58:01.843 に答える