[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

(toppers-users 974) Re: GNU開発環境の構築について



豊橋技術科学大学の若林です。

こちらの手元でも同じことをやってみましたが、落ちますね。

対策ですが、gcc-3.2.1/gcc/fixinc/gnu-regex.c:5723の
mempcpyの手前にあるアンダーバーを消してください。
これで環境が作れると思います。

--- 根拠 ---

エラーの詳細はこのような感じです。

---8<---
gcc -DIN_GCC -DHAVE_CONFIG_H -DIN_GCC -DCROSS_COMPILE -g 
-W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes
 -Wtraditional -pedantic -Wno-long-long -DHAVE_CONFIG_H
 -DGENERATOR_FILE  -W -Wall -Wwrite-strings -Wstrict-prototypes
 -Wmissing-prototypes -Wtraditional -pedantic -Wno-long-long -I. -I.. -I../../..
/gcc/fixinc -I../../../gcc/fixinc/.. -I../../../gcc/fixinc/../config -I../../../
gcc/fixinc/../../include  -o fixincl.exe fixincl.o fixtests.o fixfixes.o server.
o procopen.o gnu-regex.o fixlib.o ../../libiberty/libiberty.a /usr/lib/libcygwin.a
gnu-regex.o(.text+0x8969): In function `regerror':
/home/takayuki/h8cross/gcc-3.2.1/obj/gcc/fixinc/../../../gcc/fixinc/gnu-regex.c:
5723: undefined reference to `___mempcpy'
collect2: ld returned 1 exit status
make[1]: *** [full-stamp] Error 1
make[1]: Leaving directory `/home/takayuki/h8cross/gcc-3.2.1/obj/gcc/fixinc'
make: *** [fixinc.sh] Error 2
---8<---

出力された内容がこの程度まであると、エラーの原因が
gcc-3.2.1/gcc/fixinc/gnu-regex.cの5723行目にあると分かります。

問題の場所を見ると、
	  *((char *) __mempcpy (errbuf, msg, errbuf_size - 1)) = '\0';
という感じで、アンダーバーが2個付いた状態でmempcpy関数が使われています。

ここで、gcc-3.3の同じソースを見てみると、
	  *((char *) mempcpy (errbuf, msg, errbuf_size - 1)) = '\0';
という感じで、アンダーバーが消されています。

gccのどこがどう変更されたかと言う情報は、gcc/ChangeLogというファイルにあります。
これを開いてmempcpyを探すと、
---8<---
2003-04-15  Kaveh R. Ghazi  <ghazi at caip rutgers edu>

	PR target/10338
	PR bootstrap/10198
	PR bootstrap/10140
	* fixinc/gnu-regex.c (regerror): Use mempcpy not __mempcpy.
---8<---
とあります。

gcc-3.2.1のChangeLogの最終が2002-11-19なので、
gcc3.2.1からgcc-3.3までの間に見つかった不具合なのでしょう。
うまい具合に踏んでしまったようです。
gcc-3.3で修正されているように、同じように直してあげれば、
コンパイルは通ると思います。

--------
豊橋技術科学大学 情報工学系 組込みリアルタイムシステム研究室
  若林 隆行 (takayuki at ertl jp)