2011-01-19 9 views
8

私たちはGNU readlineライブラリに依存するC++ソフトウェアパッケージを開発しており、通常はgcc(少なくともバージョン4が必要)を使ってビルドします。これをウィンドウに移植し、静的にリンクされたバージョンを取得し、ユーザーがコンパイルすることなく再配布できるようにしたいと考えています。静的にリンクされた、正しく動作するreadlineライブラリは、Windowsの下にありますか?

私はいくつかのアプローチを試みた:GnuWin32からmingwのとreadlineのを使用して構築するのcygwin(-mno-cygwinのかmingwのコンパイラと組み合わせてのreadlineとなし、外出先)を使用して

  • 建物、
  • mingwを使って構築し、readlineと必要なpdcursesをソースからビルドする(もっとも有望なアプローチですが、静的なバイナリになってしまいました!)しかし、得られた対話シェルは正しく動作しませんでした。例えば、バックスペースは可視化されませんでした)。

私たちがどのようにアプローチを取るのでしょうか?

thx!

+0

私はWindowsプログラミングについてはほとんど知らないが、それを手伝ってはいけないが、GNU readlineはGPLされているので、バイナリのみのパッケージは配布できないことに注意してください(プリコンパイル済みのものを配布できます著作権侵害)。 – AProgrammer

+0

興味深いことに、まさにこれらの要件は何ですか? (私たちのプロジェクトはオープンソースなので、私たちは確かに遵守することができますが、ライセンス部門にはあまり熟練していません:)。オンラインソースへの参照を含むバイナリの配布などが許可されているのですか、またはソースは常に含まれていなければなりませんか? –

+0

そのために弁護士が必要です。私は元のソースが利用可能である限り、参照付きバイナリは許されていると信じています。最大のハードルは、あなたのソフトウェアもGPLでなければならないということです(他の、より寛大なオープンソースライセンスではありません)。さまざまな段階でeditlineと呼ばれるBSDのコピーライドされたreadlineクローンがあります。 –

答えて

4

同様の不満の後、私はちょうど今、両方のAをまとめましたMinGW-w64を使用するlibreadline 6.2の32ビット版と64ビット版。私DEVディレクトリの

レイアウト:

32ビットのビルドのためのいくつかの環境変数を設定し
c:\dev\msys 
c:\dev\mingw32 
c:\dev\local32 
c:\dev\mingw64 
c:\dev\local64 

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 

をインストールし、それは警告やエラーなしでコンパイルする必要があります。

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

Makefileを編集:

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

をインストールしますが、今コンパイルしreadlineのをインストールする必要があり、同じCPPFLAGSを設定し、呼び出す前のtermcapのように変数をLDFLAGS

readline 6.2

あなたは64ビットのライブラリをしたい場合は、* x86_64版-W64-MINGW32とのi686-W64-MINGW32 *とlocal64local32を交換してください。

+0

あなたの行動に関するもう少し情報を教えてもらえますか?私はそれに従おうとしましたが、2つの問題で立ち往生しました。最初にtermcap configureはホストの指定を無視し、デフォルトでg ++のunixをターゲットにしています。第2に、readlineのconfigureに、termcapライブラリの場所を指定するオプションはありません(あるいは、あなたもそれを編集しました)? –

+0

素晴らしい!私は、UNIXのmingw-w64クロスコンパイルを使って、termcapファイルを変更することなく、動作させました! 便利なヒント:configureコマンドでCC、CXX、AR、RANLIBの実行ファイルを指定することができます(makefileは変更しないでください) –

0

gnuwin32はreadlineの口をもつ Broes:非GPLのプロジェクトのためのhttp://gnuwin32.sourceforge.net/packages/readline.htm

、libeditのがより受け入れのライセンスを持っている[BSDライセンスを使用する]

+0

私は既に私がmingwの下でコンパイルするためにそのポートを得ることができなかったことを述べましたか? –

+0

は、お使いのプラットフォームに関するより詳細な情報を提供します。私は自分の箱にそれを作ることができました –

2

MinGWEditLine library

ネイティブfor Windowsコンソール

アンEditLine API実装をチェックしてください。このBSDライセンスライブラリは、GNU Readlineにあるものと同様のコマンドライン編集機能と履歴機能を提供します。

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