[トップ][一覧][最近の更新]

archives/2005/11/15

Haskell/__errno

Category of Haskell

真面目にHaskellを勉強しようと思ったので、ghciを起動。

$ ghci
   ___         ___ _
  / _ \ /\  /\/ __(_)
 / /_\// /_/ / /  | |      GHC Interactive, version 6.2.2, for Haskell 98.
/ /_\\/ __  / /___| |      http://www.haskell.org/ghc/
\____/\/ /_/\____/|_|      Type :? for help.

Loading package base ... linking ... /usr/local/lib/ghc-6.2.2/HSbase_cbits.o: unknown symbol `__errno'
ghc-6.2.2: unable to load package `base'
$

うえーん。ghcのビルド時間1時間30分を返せー(いま測った)。

てか変だね。これ。ghcの方はきちんと動いてるからdlfcnまわりの問題かなあ。

OpenBSD-cvs:src/sys/sys/errno.h

#ifndef _KERNEL
extern int errno;                       /* global error number */

#if !defined(errno) && !defined(_STANDALONE)
#include <sys/cdefs.h>
__BEGIN_DECLS
int *__errno(void);
int *___errno(void);
__END_DECLS
#define errno (*__errno())
#endif /* errno */

#endif /* _KERNEL */

あたりがあやしいのだが、どうすっかね。

ghc-6.2.2/libraries/base/include/HsBase.hの

/* Ultra-ugly: OpenBSD uses broken macros for sigemptyset and sigfillset (missing casts) */
#if __OpenBSD__
#undef sigemptyset
#undef sigfillset
#endif

が気になるので、 OpenBSD-cvs:src/include/signal.hを読む。 sigemptyset, sigfillset, sigaddset, sigdelset, sigismemberがぜんぶインライン関数になってる。

とりあえず、HsBase.hに

#undef sigaddset
#undef sigdelset
#undef sigismember

を追加してビルドしてみるか。

ううむ。違うか。