sh4-linux 용으로 samba3.4.0 버전을 크로스컴파일을 시도하는데
이래저래 자꾸만 에러가 나서 검색을 해봤다.
결론 : 검색하고 꼼꼼하게 읽어보자.. OTL
실질적으로 크로스컴파일에서 필요한건 CC 환경변수 설정과 configure에서 --host=i686(혹은 현재 아키텍쳐)를
해주는 것 외에는 별다른 것이 없다.
Step 1. 다운받고 압축푼다.
Step 2. samba-3.4.0/source3/ 에서
./autogen.sh 를 실행시킨다.
Step 3. 환경을 설정한다.
export CC=
sh4-linux-gcc
export
samba_cv_CC_NEGATIVE_ENUM_VALUES=yes
export samba_cv_CC_NEGATIVE_ENUM_VALUES=yes 를 해주는 이유는
checking that the C compiler understands negative enum values...
configure: error: cannot run test program while cross compiling
이런 에러가 발생을 하기 때문이다.
원래대로라면, 크로스 컴파일시에는 이 부분이 실행불가능 하므로 넘어가야 하는데,
이 부분이 제대로 처리되지 않아서 그런것으로 생각된다.
|
Step 4. configure를 실행한다.
--target은 지정하지 않아야 컴파일이 진행된다.
./configure
--host=i686
컴파일 하다가 winbind 와 ldap 오류가 나면 귀차니즘으로
./configure --host=i686 --without-winbind --without-ldap --disable-swat
라고 해주면 winbind와 ldap를 컴파일 하지 않는다.
SWAT(Samba Web Admin Tool)는 사용하지 않는다면 꺼주면 된다.
|
Step 5. Makefile을 수정한다.
make install 시에 설치될 위치를 정해준다.
prefix=/usr/local/samba
exec_prefix=${prefix}
...
CONFIGDIR = ${exec_prefix}/lib
원래 내용은 위와 같지만,
prefix 의 주소는 target NFS 주소의 root를 정해주고
/etc/smb.conf가 기본 환경파일의 위치이므로, 이를 정해주기 위해
CONFIGDIR의 위치를 /etc로 정해준다.
prefix=$(HOME)/target
exec_prefix=${prefix}
...
CONFIGDIR = /etc
|
컴파일 시에 talloc.c 에서 lber.h ldap.h 에러가 나면
Compiling ../lib/talloc/talloc.c
In file included from ../lib/talloc/talloc.c:36:
include/includes.h:156:18: error: lber.h: No such file or directory
include/includes.h:172:18: error: ldap.h: No such file or directory
CPPFLAGS=-DHAVE_CONFIG_H -I/usr/include -Iinclude -I./include -I. -I. -I./../lib/replace -I./../lib/talloc -I./../lib/tevent -I./../lib/tdb/include -I./libaddns -I./librpc -I./.. -I./../lib/popt
를 추가해주면 해결된다. lber.h의 경로가 제대로 추가되지 않아서 발생하는 문제이다.
|
Step 6. 컴파일 및 설치 한다.
make
make install
Step 7. 파일이 부족하면 복사한다.
나의 경우에는
libnsl.so libdl.so가 부족했다.
[링크 :
http://en.wikibooks.org/wiki/Samba/Compiling_Samba_from_Source]