간만에 왔는데, 이곳은 여전히 뭔가 마음편해지는 곳이네요.
항상 공부하고 연구하려는 사람들이 많아서 그런거 같습니다.
실은 이곳에 글을 남기게 된 이유는 기본적인 거라 생각 되면서도 골아픈 문제가 생겨서 입니다.
이전에 개발한 제품이 있는데, gcc 4.7을 사용하여 build 를 했었습니다.
그런데, 최근 어플을 개발하면서 어쩔수 없이 gcc 5.5를 사용하여 어플을 컴파일 했고, 이것을 gcc 4.7 로 컴파일 된 target board 올려서 돌려봤습니다.
그런데 역시나 libc.so.6 에서 문제가 발생을 합니다.
확인해보니 gcc 4.7 을 사용했을 경우는 libc.so.6 -> libc-2.15.so 로 되어 있고, gcc 5.5 의 경우는 libc.so.6 -> libc-2.2.1 로 되어 있더군요.
2.1.5 와 2.2.1 이므로 가운데 부번호가 틀린건데, 아마도 최근 어플에서 뭔가 새로이 기능 추가된 함수를 사용한 것으로 생각됩니다.
어쨋든 무조건 동작을 하도록 해야 해서 이래저래 방법을 찾고 있는데, 찾아본 방법은 다음과 같습니다.
1. kernel 부터 buildroot 까지 모두 gcc 5.5 로 컴파일 한다.
-> 근데 현재 사용하는 커널이 3.0.5 라서 gcc 5 버젼을 지원 안 하네요.
2. kernel 및 buildroot 버젼을 올린다.
-> 커널버젼은 올리면 될 거 같은데, 올리고 수정하는데 무지 시간이 걸리거 같고, 또 buildroot 도 어떤 버젼으로 해야 할 지 좀 어렵네요.
3. 필요한 libc 파일만 상위 버젼으로 교체
-> kernel 부팅한 후 consol 에서 교체하는 것은 불가능 하므로 (lib.so.6 를 지우는 순간 모든 shell command 및 기타 기능들
이 동작을 안함) 컴파일 할 때 libc 와 관련된 파일을 상위 버젼으로 바꿈. 근데 이게 libc 만 따로 받아서 이렇게 올려도 되는건지....
위의 3가지 중에 1,2 번은 일단 하기 힘들었고, 계속해서 3번을 해볼까 하는데, 이게 막상 하려니 어떻게 해야 할 지 막막하네요.
위의 3가지 중에 가장 좋은 방법이 어떤 것인지, 또는 다른 좋은 방법이 있는지 알려주시면 감사하겠습니다.
.
gcc 5.5를 사용하는 어플을 static 으로 컴파일 해서 gcc 4.7 환경에 동작하는 건 어떤가요?
3번으로 하려면, 가장 먼저 gcc 5.5으로 컴파일 된 /init 가 정상적으로 수행 되는지 부터가 시작이죠.
/init는 "hello. world"를 출력하고 끝나는 것도 상관 없습니다.
필요한 라이브러리 하나 하나 교체하는 노가다가 필요 할 것 같네요.