IconvForWoe32
libiconv-1.11.1
libiconvの最新版(1.11.1)はそのままの状態ではVC++6ではコンパイルエラーとなる。
以下でビルド後のバイナリおよびビルドに必要な手順を示す。
Visual C++ 6でビルドしたlibiconv 1.11.1
http://arton.no-ip.info/data/libiconv-1.11.1-bin.zip
- DLLに埋め込まれたバージョン番号が1.11.0.0となっているのは元のリソースがそうなっているからで、利用したソースアーカイブ自体は1.11.1を利用している。
ビルドのために必要な修正
MSVC用config.hにEXEEXTを設定する。EXEEXTはsrclib(missing)のビルド時に参照されるが、トップレベルでのnmaakeへの引数はsrclibのビルド時には伝播されないため、直接定義する。
diff -u config.h.msvc.org config.h.msvc --- config.h.msvc.org Thu Jul 20 04:10:22 2006 +++ config.h.msvc Sun Dec 31 12:57:36 2006 @@ -715,3 +715,4 @@ # define DLL_VARIABLE #endif +#define EXEEXT "exe"
srclibの修正
cd srclib
width.cをコンパイル対象に追加
diff -u Makefile.msvc.org Makefile.msvc --- Makefile.msvc.org Sat Jan 24 18:11:24 2004 +++ Makefile.msvc Sun Dec 31 03:26:20 2006 @@ -90,7 +90,8 @@ xmalloc.obj xstrdup.obj \ \ relocatable.obj \ - setenv.obj unsetenv.obj + setenv.obj unsetenv.obj \ + width.obj all : icrt.lib @@ -120,6 +121,9 @@ unsetenv.obj : unsetenv.c $(CC) $(INCLUDES) $(CFLAGS) -c unsetenv.c + +width.obj : width.c + $(CC) $(INCLUDES) $(CFLAGS) -c width.c icrt.lib : $(OBJECTS) -$(RM) icrt.lib
stdint.hが存在しないので、unitypes.hを修正して直接定義する。
diff -u unitypes.h.org unitypes.h --- unitypes.h.org Fri May 20 01:58:24 2005 +++ unitypes.h Sun Dec 31 03:10:10 2006 @@ -20,7 +20,10 @@ #define _UNITYPES_H /* Get uint8_t, uint16_t, uint32_t. */ -#include <stdint.h> +/* #include <stdint.h> */ +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; /* Type representing a Unicode character. */ typedef uint32_t ucs4_t;
unsetenv.cがunistd.hをincludeしないように修正する。
diff -u unsetenv.c.org unsetenv.c --- unsetenv.c.org Sun Jun 18 00:51:52 2006 +++ unsetenv.c Sun Dec 31 03:03:49 2006 @@ -27,7 +27,9 @@ #include <stdlib.h> #include <string.h> +#if HAVE_UNISTD_H #include <unistd.h> +#endif #if !_LIBC # define __environ environ
上記修正後、トップレベルディレクトリに戻り、nmakeを実行する。コマンドラインで指定が次第な定義はNO_NLS。以下ではDLLを生成するための指定を示す。
nmake -f Makefile.msvc DLL=1 MFLAGS=-MD NO_NLS=1
以上
Keyword(s):
References: