x86_64上ではwinegccが正常に動作しない?(前半)
(2009/2/15)この記事の問題はバージョン1.1.15のWineでは解決されている。
「wime(1.8.0)のビルドメモとebuild」から扱っていたwimeについて、ATOKの試用期限を過ぎている関係で動作は確認できないものの、Mandriva向けパッケージだけでも作成しておこうと思い、ビルドしようとしたのだが
[任意]ファイル名: wime-1.8.3-build.patch
diff -ur wime-1.8.3.orig/Makefile wime-1.8.3/Makefile --- wime-1.8.3.orig/Makefile +++ wime-1.8.3/Makefile @@ -9,7 +9,7 @@ DOTDIR=$(HOME)/.wime RCFILE=hinshi -override CFLAGS += -std=gnu99 -Wno-multichar -fgnu89-inline +override CFLAGS += -std=gnu99 -Wno-multichar -fgnu89-inline -fPIC define callsubmake for d in $(SUBDIRS);do\ diff -ur wime-1.8.3.orig/dll/Makefile wime-1.8.3/dll/Makefile --- wime-1.8.3.orig/dll/Makefile +++ wime-1.8.3/dll/Makefile @@ -3,8 +3,8 @@ CC=winegcc SPEC=$(basename $(APP)).spec -override CFLAGS+=-I../so -override LDFLAGS+= +override CFLAGS+=-m32 -I../so +override LDFLAGS+=-m32 vpath %.h ../so @@ -19,6 +19,7 @@ rm -f $(APP) $(OBJS) install: + mkdir -p $(WINELIBDIR) install $(APP) $(WINELIBDIR) uninstall: diff -ur wime-1.8.3.orig/exe/Makefile wime-1.8.3/exe/Makefile --- wime-1.8.3.orig/exe/Makefile +++ wime-1.8.3/exe/Makefile @@ -5,8 +5,8 @@ LIBS=lib.o list.o VPATH=$(LIBDIR) ../so -override CFLAGS+=-I../so -I$(LIBDIR) -mconsole -mno-cygwin -override LDFLAGS+=-limm32 -mconsole -mno-cygwin +override CFLAGS+=-m32 -I../so -I$(LIBDIR) -mconsole -mno-cygwin +override LDFLAGS+=-m32 -limm32 -mconsole -mno-cygwin -Wl,-z,noexecstack APPSCRIPT=$(basename $(basename $(APP))) diff -ur wime-1.8.3.orig/lib/Makefile wime-1.8.3/lib/Makefile --- wime-1.8.3.orig/lib/Makefile +++ wime-1.8.3/lib/Makefile @@ -1,5 +1,7 @@ OBJS= lib.o list.o +override CFLAGS += -m32 + all:$(OBJS) install: diff -ur wime-1.8.3.orig/so/Makefile wime-1.8.3/so/Makefile --- wime-1.8.3.orig/so/Makefile +++ wime-1.8.3/so/Makefile @@ -4,7 +4,8 @@ LIBS=lib.o VPATH=$(LIBDIR) ../exe -override CFLAGS+=-I$(LIBDIR) -I../exe -I../so +override CFLAGS+=-m32 -I$(LIBDIR) -I../exe -I../so +override LDFLAGS+=-m32 all:$(APP) diff -ur wime-1.8.3.orig/tools/hinshi-list/Makefile wime-1.8.3/tools/hinshi-list/Makefile --- wime-1.8.3.orig/tools/hinshi-list/Makefile +++ wime-1.8.3/tools/hinshi-list/Makefile @@ -2,8 +2,8 @@ CC=winegcc OBJS= hinshi-list.o -override CFLAGS+=-I../../so -mconsole -mno-cygwin -override LDFLAGS+=-limm32 +override CFLAGS+=-m32 -I../../so -mconsole -mno-cygwin +override LDFLAGS+=-m32 -limm32 APPSCRIPT=$(basename $(basename $(APP)))
以前Gentooのときに使用した上記修正だけでは
$ tar jxf [wime-1.8.5.tar.bz2の場所] $ cd wime-1.8.5/ $ patch -p1 < [wime-1.8.3-build.patchの場所] patching file Makefile patching file dll/Makefile patching file exe/Makefile patching file lib/Makefile patching file so/Makefile patching file tools/hinshi-list/Makefile $ LC_MESSAGES=C make for d in lib so dll exe tools;do make -C $d all || exit 1; done make[1]: Entering directory `/tmp/work/wime-1.8.5/lib' cc -g -Wall -std=gnu99 -Wno-multichar -fgnu89-inline -fPIC -m32 -c -o lib.o lib.c cc -g -Wall -std=gnu99 -Wno-multichar -fgnu89-inline -fPIC -m32 -c -o list.o list.c make[1]: Leaving directory `/tmp/work/wime-1.8.5/lib' make[1]: Entering directory `/tmp/work/wime-1.8.5/so' cc -g -Wall -std=gnu99 -Wno-multichar -fgnu89-inline -fPIC -m32 -I../lib -I../exe -I../so -c -o libwime.o libwime.c cc -m32 -shared -Wl,-soname,libwime.so -o libwime.so libwime.o ../lib/lib.o make[1]: Leaving directory `/tmp/work/wime-1.8.5/so' make[1]: Entering directory `/tmp/work/wime-1.8.5/dll' winegcc -g -Wall -std=gnu99 -Wno-multichar -fgnu89-inline -fPIC -m32 -I../so -c -o libwime.o libwime.c winegcc -shared libwime.dll.spec -mno-cygwin -L../so -lwime -m32 -o libwime.dll.so libwime.o ld: Relocatable linking with relocations from format elf32-i386 (libwime.o) to format elf64-x86-64 (libwime.CgHb7M.o) is not supported winebuild: ld -r failed with status 256 winegcc: winebuild failed make[1]: *** [libwime.dll.so] Error 2 make[1]: Leaving directory `/tmp/work/wime-1.8.5/dll' make: *** [all] Error 1
となって失敗した。dllディレクトリで手動でwinegccコマンドを
- LD="ld -m elf_i386"
- GNUTARGET=elf32-i386
- linux32コマンド
- オプションに「-Xlinker "-m elf_i386"」や「-Xlinker -m -Xlinker elf_i386」
など色々と変化させて試したが、効果はなかった。環境変数WINEBUILDは受け付けることが分かったが
WINEBUILD="winebuild [オプション...]" winegcc ...
の形式で実行すると
winegcc: winebuild [オプション...] failed
となってしまい、後ろにオプションが付けられない。-vでもダメ。winebuildへのラッパースクリプトを作成して
#! /bin/sh winebuild --ld-cmd=[適当なコマンド] -v ${@}
これを環境変数WINEBUILDに指定すると
$ WINEBUILD=[ラッパースクリプトの場所] winegcc -shared libwime.dll.spec -mno-cygwin -L../so -lwime -m32 -o libwime.dll.so libwime.o as -o libwime.5XhPiL.o libwime.oilffz.s ld -r -o libwime.y4nd22.o libwime.5XhPiL.o libwime.o /usr/lib/wine/libwinecrt0.a ld: Relocatable linking with relocations from format elf32-i386 (libwime.o) to format elf64-x86-64 (libwime.y4nd22.o) is not supported winebuild: ld -r failed with status 256 winegcc: [ラッパースクリプトの場所] failed
-vオプションを渡すことはできた(上の出力が詳細になっている)が--ld-cmdオプションだけは何故か見てくれない。
使用したバージョン:
- Wine 1.1.10 (libwine-devel 1.1.10-1mdv2009.0)