티스토리 뷰

개발/Compile error

[cross-compile] mysqld

Jaeyeon Baek 2015. 7. 6. 11:34



mariadb-10.0.19 를 mips로 cross-compile 하면서 발생 된 문제를 몇가지 기록해봅니다.


일단 개발서버 환경은 32bit, 타겟은 mips(64bit) 입니다.

기본적으로 mariadb 소스를 받으면 BUILD 폴더 밑에 mips관련 configure가 있지만..

위 환경에서는 정상적인 동작을 못하는듯.. 그래서 하나하나 error를 잡아가며 compile을 시도 했습니다.


1) 컴파일은 일반 버전(?)과 동일하게 컴파일 폴더를 만들고 그 폴더 내에서 cmake를 진행합니다.

   - 그 과정은 여기를 참고

   - 단, CC, CXX 등은 환경에 맞는 컴파일러를 사용합니다. 

   - 제 경우 개발서버 환경이 32bit 머신이기 때문에 n32 옵션  사용. 이 옵션은 gcc, gcc+ 양쪽에 다 들어가야 합니다.


2) cmake 시에 불필요한 코드로 인한 에러는 잡을 필요가 없다고 판단되어 생략하도록 옵션을 줬습니다.

   - -DWITH_UNIT_TESTS=OFF


3) 정상적인 cross-compile을 위해 아래 옵션이 필요 했습니다. (타겟과 환경이 맞지 않는다는 에러가 나옴)

   - -DXTRADB_OK=1


3) cmake 이후 make를 수행할때 아래와 같이 수행하면 자세한 내용을 볼 수 있습니다.

   - make VERBOSE=1


4) 기본적으로 cross-compile을 위해서는 정상 컴파일 된 x86 버전(혹은 그와 유사한)이 필요합니다.

   "/bin/sh: ./comp_err: cannot execute binary file" 와 같은 에러가 발생하게 됩니다.

   이때는 x86에서 컴파일해서 나온 바이너리로 덮어쓰고 다시 make를 진행합니다.

   -. /bin/sh: ./comp_err: cannot execute binary file

   make도중 나온 binary를 갖고 뭔가를 또 수행하려는 듯 한데, 제 경우 서버는 x86이기 때문에 필요했습니다.

   중간중간 같은 문제가 여러번 나오는데 동일하게 해결하도록 합니다.


5) 그리고.. 최종적으로 99%에서 mysqld 생성 도중 에러가 나오는 경우....... gcc 버전업이 필요 했습니다.

   지금까지는 4.1, 4.3버전을 사용했었는데 이때는 built-in(__sync_lock_test_and_set와 같은..) 된게 cross-compile에는 지원이 안되서.. 결국 4.7로 업그레이드.. 다른 더 좋은 방법이 있는지는 모르겠네요.



댓글
댓글쓰기 폼