Windowsの下で、静的にリンクされた、正しく動作するReadlineライブラリ?

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

質問

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

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

  • Cygwinを使用して構築(提供されたReadlineと組み合わせたものと一緒に行きます -mno-cygwin またはMingwコンパイラ)、
  • gnuwin32のmingwとreadlineを使用して構築します(解決されていない依存関係がSTAT64への依存関係がありますが、これは解決できませんでした)、
  • MINGWを使用してBuilding ReadlineとSourceからの必要なPDCURSEを使用して構築します(最も有望なアプローチは静的バイナリに到達しました!しかし、得られたインタラクティブシェルは誤って動作しました。

仕事へのアプローチの1つを取得する方法はありますか?

役に立ちましたか?

解決

同様のフラストレーションの後、私は今、Libreadline 6.2の32ビットバージョンと64ビットバージョンの両方を使用してコンパイルしました。 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

Termcap 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

その呼び出しの後 インストールします また、警告やエラーなしでコンパイルする必要があります。

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

インストールします これで、readlineをコンパイルしてインストールする必要があります!
64ビットライブラリが必要な場合は、交換してください I686-W64-MINGW32 * x86_64-w64-mingw32 * and local32local64.

他のヒント

チェックアウト Mingweditlineライブラリ

ネイティブWindowsコンソールの編集API実装。このBSDライセンスライブラリは、GNU Readlineで見つかったものと同様のコマンドライン編集と履歴関数を提供します。

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

Gnuwin32には、読み取りポートがあります。 http://gnuwin32.sourceforge.net/packages/readline.htm

非GPLプロジェクトの場合、Libeditにはより受け入れられるライセンスがあります[BSDライセンスを使用

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top