0

system-fileio をグローバル パッケージ db にインストールしようとしましたが、失敗しました:

c:\Haskell\2013.2.0.0\bin>cabal-1.20.0.1.exe install system-fileio
Resolving dependencies...
Configuring system-fileio-0.3.13...
Building system-fileio-0.3.13...
Failed to install system-fileio-0.3.13
Last 10 lines of the build log ( C:\Users\bitli\AppData\Roaming\cabal\logs\system-      fileio-0.3.13.log ):
The import of `System.IO.Error' is redundant
except perhaps to import instances from `System.IO.Error'
To import instances alone, use: import System.IO.Error()
lib\hssystemfileio-win32.c: In function 'hssystemfileio_copy_permissions':

lib\hssystemfileio-win32.c:10:17:
error: storage size of 'st' isn't known

lib\hssystemfileio-win32.c:11:2:
warning: implicit declaration of function '_wstat64'
cabal-1.20.0.1.exe: Error: some packages failed to install:
system-fileio-0.3.13 failed during the building phase. The exception was:
ExitFailure 1

Windows 7 で試してみました。

4

1 に答える 1

1

Windows 7 で system-fileio-0.3.13 を使用してこの同じ問題に遭遇しました。Haskell Platform 2013.2.0.0 の組み込み mingw を使用した Windows コマンドラインと、新しい mingw64 を使用した msys 内の両方を使用しました。この問題は、system-fileio-0.3.12 と system-fileio-0.3.13 の間に導入された変更によって引き起こされたようです。system-fileio の git repo にはリンク先の Web インターフェイスがないようですが、0.3.12 の lib\hssystemfileio-win32.cでは以下が使用されます。

struct _stat st;
int rc = _wstat(old_path, &st);

一方、0.3.13 の hssystemfileio-win32.cは次のように変更されました。

struct _stat64 st;
int rc = _wstat64(old_path, &st);

0.3.12 の hssystemfileio-win32.c を 0.3.13 の上にコピーすると、ビルドできるように見えますが、実際に正しく機能するかどうかはわかりません。

これがうまくいくかどうかはわかりませんが、Windows 7 で yesod をビルドしようとしています (Haskell プラットフォームのものからアップグレードされた cabal-install を使用してサンドボックス内で)、system-fileio 0.3 を抽出しました。 Hackage から 13 tarball をダウンロードし、0.3.12 の hssystemfileio-win32.c をコピーしてからcabal sandbox add-source ../system-fileio-0.3.13、yesod サンドボックス内で実行しました。私cabal installの yesod はその後続行でき、機能したようです。system-fileio のシステム インストールを行っている場合は、抽出して変更した system-fileio-0.3.13 ディレクトリを直接ビルドするだけでよいはずです。

Haskell と cabal について何か知っている人なら、このハックの代わりに適切な解決策を提供できると確信しています。

于 2014-05-24T20:27:04.940 に答える