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]
Posted by 구차니