Unix/Solaris10

MySQL 3 컴파일 - 컴파일...

ForceCore 2007. 9. 21. 23:27
2008.10.26 update:
최종 compile configuration option:
$ ./configure --prefix=/usr/local/mysql3 --with-extra-charsets=complex --enable-thread-safe-client
소스코드는 sunfreeware ftp를 뒤지면서 찾아내었다 ㅠㅠ;
bit keeper도 짤려서.
소스코드는 삭제하지 않기로 결정.

이 때에는 또 다른 에러에 부딪혔다.

invalid conversion from `size_socket*' to `socklen_t*'
이런 에러인데.

config.h를 보면
#define SOCKET_SIZE_TYPE int
이렇게 되어 있다. int를 size_t로 고치고 다시 make를 계속 수행시킨다.
주의사항: make clean하고 다시 configure를 하면 config.h가 원상복구 되므로
config.h를 고치고 바로 make를 해야만 한다.




http://developer.apple.com/internet/opensource/osdb.html
맥에서 MySQL을 컴파일 해서 설치하는 과정을 담은 문서.
이 것을 컨닝하면서 하기로 했음.
$ ./configure --help
어? 안된다. configure 자체도 없다.
역시 너무 구버전이라 obsolete한 것으로 하려면 골치아프다.
를 봐도 컴파일을 어떻게 하라는 소리는 없군.
Doc디렉토리에 문서가 있으니까 그것을 보기로 했다....
texi파일로 되어있다 ㅡㅜ;;;
문서도 소스코드가 있는 법이지. 특히나 길어서 chapter, index를 관리해야 하는 문서는 latex같은 것으로 해서 pdf파일을 생성하는 것이 관례인듯?

구글에 직접 물어보자.
검색어: compiling mysql 3
공식 홈페이지의 매뉴얼이 뜬다.
http://dev.mysql.com/doc/refman/4.1/en/installing-source.html
틀렸다 =_= ./configure를 하란다.

compiling mysql  from source tree로 재검색.
http://dev.mysql.com/doc/refman/4.1/en/installing-source-tree.html

autoconf이런 것이 필요하다고 하는 것으로 보아서 아마...
갈 길이 까마득할 것 같군! ㅋㅋㅋ

sunfreeware를 이용해서
autoconf설치.
automake설치.
libtool설치.

소스 디렉토리에서
을 실행한다.

을 해보니 에러만 잔뜩 난다 -_-??
별 문제 없이 무시할만한 것들이 많아보이지만...
과연 awk가 구문오류라고 하는 것을 무시할 수 있을까?
gawk도 설치했다.
그리고 이미 있는 awk는 awk.old로 바꾸고 gawk에 소프트링크.
에러가 많이 줄었다.
솔라리스에 m4스크립트가 있긴 하지만 에러를 보니 m4가지고 불평을 하는군. m4도 새로 설치. xpg의 m4가 솔라리스의 것인데, /usr/local/bin보다 실행 우선순위가 뒤에 있으므로 패키지만 설치해도 됨.

나중에 문제가 될만한 것으로 보이는 에러다.
symlink에러가 꽤 보인다.
berkeley DB문제인듯 싶은데,
역시 속편하게 sunfreeware 패키지를 설치!
설치한 뒤,
를 함.
그래도 오류가 없어지지 않는다. 별 문제 없을 것이라고 간주하고 일단은 넘어가보자.

이번에는
-style pattern rules are a GNU make extension
에러가 잔뜩 난다?
gmake를 써야 할듯.
sunfreeware의 make를 설치하면 된다.

으음...............................................

열심히 시키는대로 괄호 쳐 있는 명령어 두 개를 실행시킨다.
GNU make의 기능으로 되어있는 뭘 쓴다... 고 하는데 무시.
를 내리니 configure가 생성되긴 했다.
제대로 되는진 미지수 ㅋㅋㅋ
을 실행하면
./configure --prefix=/usr/local/mysql --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static
CXXLDFLAGS= CXXFLAGS=-Wimplicit -Wreturn-type -Wswitch -Wtrigraphs -Wcomment -W -Wchar-subscripts -Wformat -Wparentheses -Wsign-compare -Wwrite-strings -Woverloaded-virtual -Wsign-promo -Wreorder -Wctor-dtor-privacy -Wnon-virtual-dtor -felide-constructors -fno-exceptions -fno-rtti -mcpu=pentiumpro -O3 -fno-omit-frame-pointer CXX=gcc CFLAGS=-Wimplicit -Wreturn-type -Wswitch -Wtrigraphs -Wcomment -W -Wchar-subscripts -Wformat -Wparentheses -Wsign-compare -Wwrite-strings -Wunused -mcpu=pentiumpro -O3 -fno-omit-frame-pointer
이렇게 configure를 할 것이다. 이 대로 configure를 하든지... 필자는 BUILD/compile-pentium만 하니 실패했다. (configure가 없어서 -_-)
configure파일부터 생성하고 실행하니 되는 어이없는 일 발생.
원래는 configure도 같이 만들어져야 할텐데...

어쨌거나 build스크립트는 잘 돌았다. until..
relocations remain against allocatable but non-writable sections
이런 에러가 떴다. 이 에러메시지로 구글질을 좀 해보면
gcc에 -mimpure-text를 붙여서 컴파일 하라고 하는데,
make파일을 고칠 엄두는 안 나니까...
이것만 야매로 컴파일 하면 되지 뭐... 라고 생각하고 실행에 옮겼다.

-mimpure-text는 gcc컴파일러 매뉴얼에도 나온다.
저 에러 메시지가 안 나오게 한다 어쩌구 저쩌구
솔라리스엔 -fPIC 혹은 -fpic명령어를 써서 컴파일 하면 된다.
그리고 이 옵션을 가진 컴파일러는 솔라리스에만 있다고 한다.
있기는 개뿔이... 솔라리스의 오리지널 cc에만 있는데
난 gcc로 컴파일 중이니까... 난 -mimpure-text로 가야지.

make의 장점이, 어느 디렉토리로 가서 어느 명령어를 수행했는지 알 수 있다는건데
그 빌드 에러가 나는 곳으로 가서, -mimpuretext 옵션을 추가한 컴파일을 했다.
그러면 그 에러나던 것만 컴파일 하고, 컴파일의 결과물은 어쨌든 존재하게 되니까
make는 다음 단계의 make들을 하게 된다!

/bin/bash ../libtool --tag=CC   --mode=link gcc  -O3 -DDBUG_OFF -Wimplicit -Wreturn-type -Wswitch -Wtrigraphs -Wcomment -W -Wchar-subscripts -Wformat -Wparentheses -Wsign-compare -Wwrite-strings -Wunused-mimpure-text-mcpu=pentiumpro -O3 -fno-omit-frame-pointer  -DHAVE_RWLOCK_T -version-info 10:0:0  -o libmysqlclient_r.la -rpath /usr/local/mysql/lib/mysql libmysql.lo net.lo violite.lo password.lo get_password.lo errmsg.lo my_init.lo my_static.lo my_malloc.lo my_realloc.lo my_create.lo my_delete.lo mf_tempfile.lo my_open.lo mf_casecnv.lo my_read.lo my_write.lo errors.lo my_error.lo my_getwd.lo my_div.lo mf_pack.lo my_messnc.lo mf_dirname.lo mf_fn_ext.lo mf_wcomp.lo typelib.lo safemalloc.lo my_alloc.lo mf_format.lo mf_path.lo mf_unixpath.lo my_fopen.lo my_symlink.lo my_fstream.lo mf_loadpath.lo my_pthread.lo my_thr_init.lo thr_mutex.lo mulalloc.lo string.lo default.lo my_compress.lo array.lo my_once.lo list.lo my_net.lo charset.lo hash.lo mf_iocache.lo my_seek.lo my_pread.lo mf_cache.lo my_gethostbyname.lo my_port.lo getopt.lo getopt1.lo getvar.lo my_lib.lo strmov.lo strxmov.lo strnmov.lo strmake.lo strend.lo strnlen.lo strfill.lo is_prefix.lo int2str.lo str2int.lo strinstr.lo strcont.lo strcend.lo bchange.lo bmove.lo bmove_upp.lo longlong2str.lo strtoull.lo strtoll.lo llstr.lo ctype.lo ctype-big5.lo ctype-czech.lo ctype-euc_kr.lo ctype-gb2312.lo ctype-gbk.lo ctype-sjis.lo ctype-tis620.lo ctype-ujis.lo dbug.lo  -lpthread -lthread -lz -lcrypt -lgen -lsocket -lnsl -lm  -lpthread -lthread

대략 빌드 명령어가 이래 먹었다. ㄱ-;;

이 뒤로 다시 한참 잘 컴파일 됨.
그러다 같은 에러가 나와서 같은 야매로 해결.

다른 에러가 나왔음.
ld: fatal: library -lz: not found
ld: fatal: library -lcrypt: not found
ld: fatal: library -lgen: not found
ld: fatal: library -lsocket: not found
ld: fatal: library -lnsl: not found
ld: fatal: library -lm: not found
ld: fatal: library -lc: not found
ld: fatal: File processing errors. No output written to mysql

왜냐하면, 솔라리스에는 static 라이브러리라는게 존재하지 않기 때문이다 (?)
http://lists.mysql.com/mysql/524
configure를 잘못한거다.
configure에 static이 들어가 있던걸 빼면 됨...
그래서... 일단은 에러나는 것만 static 옵션을 빼고 컴파일 해볼까 ㅋㅋㅋ?

이번엔 요렇게 나온다. ㄱ-;;
http://bugs.mysql.com/bug.php?id=6862별 도움은안 됨.

결국은? -all-static 뒤에 있어서 뺐던 것 중 구성요소가 필요했던 것.
-all-static만 빼고 그 뒤에 필요하다고 한 것을 다 살렸다.
명령어는 결국 아래와 같이 되었다.
그런데 계속 같은 에러가 난다.
./client의 Makefile을 수정해서 -all-static을 제거함.
전부!;;
-all-static으로 검색하여 전부 제거했다 (제거하기 전에 파일 백업은 해둘 것)

각 컴파일은 성공했지만!!!
Too many errors - Goodbye
가 결국 떴다.
어셈블러 단계에서.

역시 configure 잘못 -_-^ 짜증난다.
configure는...
$ ./configure --prefix=/usr/local/mysql3 --with-extra-charsets=complex --enable-thread-safe-client --with-berkeley-db=/usr/local/BerkeleyDB
이걸로 다시 함. 아... 버클리 DB는 너무 최신버전이라 (!) with... 를 뺐다 ㅠㅠ
prefix를 지정해주어서 기존 mysql과 공존을 시도.
컴파일이 성공했다. 아무 에러 없이!