Subject: Re: Cannot compile samba due to the error of trans2.c
From: [email-masked] (Masazumi Arai)
Date: 30 May 1997 09:17:12 GMT
Newsgroups: fj.sys.ews4800

荒井@広大・工 と申します。

samba-1.9.16p11 をmakeした際、trans2.c のコンパイルに失敗するという問
題に対して、多くの方からfollowを頂き、無事解決することができました。

1. 失敗の経緯

・OS
	EWS-UX/V (Rel 4.2) Release 7.1

・Makefile等の編集

(1) ケース１
  includes.h への追加：
	#include <sys/sockio.h>
	#define       SYSV
 	#define USE_WAITPID
	#define SIGNAL_CAST (void (*)())
	#define USE_STATVFS
	#define USE_GETCWD
	#define DEFAULT_PRINTING PRINT_SYSV
	#endif

  Makefile への追加：
  	# This is for EWS4800, EWS-UX/V (Rel4.2)
	CC = /usr/abiccs/bin/cc
	FLAGSM = -DEWS -DSHADOW_PWD  -DKANJI=\"euc\"
	LIBSM = -lsocket -lnsl -lc -lucb

(2) ケース２
  Makefile の編集のみ：
	CC = /usr/abiccs/bin/cc
	FLAGSM = -DSVR4 -DSHADOW_PWD -DKANJI=\"sjis\" -DDONT_HAVE_FLOCK
	LIBSM = -lsocket -lnsl -lc

ケース１は、「実例付きSambaの使い方」
(ftp://etlport.etl.go.jp/pub/windows/knowhow/samba.txt)
に載っていたパッチを元に、私が最初に試みた方法です。

ケース２は、パッチなどいらず、こうすればできると
中野敏行さん<[email-masked]>が教えて下さった
方法です。

私のところ(OSはRelease 7.1)では、いずれの方法も、次に示すエラーで失敗
しました。しかし、多くの方（太田さん、Release 8.1； 大貫さん、Release
9.1； 中野さん、Release 11.1）からは、いずれかの方法でコンパイルできた
との情報を頂きました。この点は、乙藤さんが御指摘のように、OSのRelease
に依存するようです。

・エラーメッセージ

  Compiling trans2.c
  accom: Error: trans2.c, line 195: number of dimensions between array
  argument and prototype disagree
           unix_convert(fname,cnum,0);
         ---------------------------^ 
  accom: Error: trans2.c, line 584: number of dimensions between array
  argument and prototype disagree
           unix_convert(directory,cnum,0);
         -------------------------------^
  （途中、略）
  *** Error code 1 (bu21)
  make: fatal error.

2. エラーの回避策

(1) ソースコードの修正

HORIE Masayukiさん <[email-masked]>、倉島顕尚さ
ん <[email-masked]>から、ソースコードの
unix_convert(fname,cnum,0)の部分を修正すれば、 エラーを回避できるとの
御指摘を受けました。

そこで、trans2.c, pipes.c, reply.c に現れるすべての
	unix_convert(hogehoge,cnum,0)
を、
	unix_convert(hogehoge,cnum,(char*)0)
と書き換えました。

(2) リンクするライブラリの変更

リンクするライブラリとして、-lucbを指定するのはよくないとの御指摘を受
けました（中野さん、同記事； HORIEさん、同記事） 。しかし、-lucbを削除
すると、別のエラーが出ます（試したら、実際そうなった）。これには、
-lresolvを指定すればよいそうです（倉島さん、同記事）。

そこで、
	LIBSM = -lsocket -lnsl -lc -lresolv
としました。

3. 結果

以上の修正をして、make した結果、エラーなくコンパイルできました。
現在のところ、sambaはうまく動いています。

情報を下さった方には、この場を借りてお礼を申し上げます。ありがとうござ
いました。
----------------------------------------------------------------------
                                    荒井正純
                                    広島大学 工学部 共通講座環境基礎学
                                    [email-masked]