기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

간단하면서도 골아픈 질문이 있습니다. 

 

이전에 개발한 제품이 있는데, 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가지 중에 가장 좋은 방법이 어떤 것인지, 또는 다른 좋은 방법이 있는지 알려주시면 감사하겠습니다. 


고도리

2018.02.27 06:47:49
*.170.154.32

1. 커널은 상관없습니다.

2. buildroot는 기억이 가물하지만, configuration시 gcc 버전 선택하는 부분이 있을겁니다.

3. 은 추천하지 않습니다.


1의 경우 커널은 glibc에 dependency가 거의 없습니다.

있을 경우가 가끔있는데, 3.0.5면 큰 이슈는 없을겁니다......gcc 4.7 사용하시면 됩니다.


2의 경우 중 buildroot를 적절히 맞춰 쓰시는게 좋을 듯 합니다.


3. app이 C++인가요? gcc 5.5가 아닌 좀 더 낮은 버전에 알맞도록 app을 적절히 확인하시는게 좋을 듯 합니다.

이런 경우 몇몇 문법에 문제가 있는 경우일 듯 합니다.



칼마

2018.02.27 17:39:46
*.90.129.149

답변 감사드립니다. 

근데 한가지 궁금한 점이 있는데요.


답변 주신 1번에서 

커널 3.0.5를 gcc 5.5 로 컴파일 하려 했더니 /include/linux/compiler-gcc5.h 가 없어서 컴파일이 안됐습니다. 

확인해보니 compiler-gcc4.h 는 있는데, 커널 3.0.5가 나올 당시는 gcc 5 가 나오기 전이라서 compiler-gcc4.h 만 있었다고 하더군요.

compiler-gcc4.h 는 gcc 4 만 지원한다고 해서 gcc 5 로 컴파일을 못했었죠. 혹시 compiler-gccx.h 파일에 관계없이 컴파일을 할 수 있는 방법이 있나요?  

(참고로 compiler-gccx.h 파일은 그냥 copy 해서 쓰지 말라고 되어 있었습니다)


그리고 문제가 되었던 부분이 mongo db 를 gcc 5.5 로 컴파일 한 후 target 보드에서 실행하니, 


./mongod: relocation error: /usr/data/lib/libc.so.6: symbol _dl_find_dso_for_object, version GLIBC_PRIVATE not defined in file ld-linux-armhf.so.3 with link time reference”


위와 같은 에러가 떠서 libc 버젼을 올려야 되겠다 생각했거든요.

근데, 이런 경우 정말 compiler 버젼을 올리는 방법 밖에 없을까요? 다른 방법을 몰라서요..

고도리

2018.02.27 20:53:34
*.170.154.32

저는 이런 경우는 다음과 같이 합니다.


1. 커널은 gcc-4.7로 컴파일해서 문제없으면, gcc-4.7로 사용한다.

2. rootfs용 gcc 버전은 buildroot등에 지정된 적절한 버전으로 사용한다.....입니다.


커널은 gcc-4.7로 컴파일 하시면 되고요(rootfs gcc버전과는 큰 상관없습니다).

rootfs는 gcc-5 대로 사용하시면 됩니다.

---------------------

맨 처음 댓글의 설명이 이렇게 한건데, 이해가 잘 안되게 써 놓았네요....ㅠ.ㅠ

쾌도난마

2018.02.27 19:08:30
*.108.69.211

용량에 제한 없고 static 으로 빌드 된다면

application을 static 으로 올리시면 되지 않을까요?

칼마

2018.02.27 19:41:45
*.90.129.149

정확히는 모르겠습니다. 

용량에 크게 제한이 있는 것은 아니기 때문에 static 으로 해도 될 것 같이 생각은 되네요.

문제는 mongo db 가 static 으로 compile 되는지 모르겠습니다. 

고도리

2018.02.27 20:54:46
*.170.154.32

mongo db 버전을 살짝 낮춰보는 것도 하나의 방법일 듯 싶긴 합니다만....^^

gcc-4.7 버전에 맞는게 있을지는 모르겠습니다.

이제현

2018.02.27 21:22:30
*.250.177.234

네, Mongodb 2.6.10은 ARM 32bit에서 잘 돌아가는데, 3.x는 ARM 64bit에서만 동작한다는 글이 여기저기 있네요.

https://forum.odroid.com/viewtopic.php?f=95&t=29208


고도리

2018.02.27 23:52:13
*.170.154.32

https://docs.mongodb.com/manual/installation/


여기보니


v3.4 서부터는 더이상 32bit machine을 지원하지 않는 듯 합니다.

참고하시기 바랍니다.

칼마

2018.02.28 01:57:09
*.90.129.149

확인해 보니 mongo DB 3.2 버젼을 가지고 컴파일 했다고 하네요.

3.2는 32bit 를 지원하는 것 같습니다. 


이렇게 되니 문제는 gcc 버젼이겠죠...

현재는 이도저도 안되서 일단 gcc 4.9.4  로 bootloader, kernel, buildroot 를 컴파일 한 후 mongo DB 도 4.9.4 로 

컴파일 해서 사용하라고 할 예정입니다. 

그런데, 4.9.4로 컴파일 하니 컴파일은 됐는데, kernel 부팅하다가 


Uncompressing Linux... done, booting the kernel.

<6>Initializing cgroup subsys cpuset

<6>Initializing cgroup subsys cpu

<5>Linux version 3.0.51 (yikim@ubuntu-kernel) (gcc version 4.7.3 20121001 (prerelease) (crosstool-NG linaro-1.13.1-4.7-2012.10-20121022 - Linaro GCC 2012.10) ) #5 SMP Tue Feb 27 16:28:51 KST 2018

CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=10c5387d

CPU: VIPT nonaliasing data cache, VIPT aliasing instruction cache

Machine: iCam7000S

Memory policy: ECC disabled, Data cache writealloc

CPU EXYNOS4412 (id 0xe4412211)

<7>exynos4_init_clocks: initializing clocks

<6>S3C24XX Clocks, Copyright 2004 Simtec Electronics


여기가지 나오고 멈추네요....^^;;;;;;


정상적으로 나온다면 


Uncompressing Linux... done, booting the kernel.

<6>Initializing cgroup subsys cpuset

<6>Initializing cgroup subsys cpu

<5>Linux version 3.0.51 (yikim@ubuntu-kernel) (gcc version 4.7.3 20121001 (prerelease) (crosstool-NG linaro-1.13.1-4.7-2012.10-20121022 - Linaro GCC 2012.10) ) #5 SMP Tue Feb 27 16:28:51 KST 2018

CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=10c5387d

CPU: VIPT nonaliasing data cache, VIPT aliasing instruction cache

Machine: iCam7000S

Memory policy: ECC disabled, Data cache writealloc

CPU EXYNOS4412 (id 0xe4412211)

<7>exynos4_init_clocks: initializing clocks

<6>S3C24XX Clocks, Copyright 2004 Simtec Electronics


<3>s3c_register_clksrc: clock audiocdclk has no registers set

<3>audiocdclk: no parent clock specified

<3>s3c_register_clksrc: clock armclk has no registers set


이렇게 나와야 하거든요..

일단 audiocdclk 쪽에 뭔가 gcc 4.9.4 랑 안맞는게 있는지 확인중입니다..

근데, 쉽지는 않네요...^^;;;;;

고도리

2018.03.01 00:37:09
*.170.154.32

툴체인을 두개 쓰시는게 좋을 듯 하네요.


3.0.15 커널일 듯 싶은데(파트넘버가 4412인듯 해서요), gcc-4.6 정도를 쓰시는게 좋습니다.

커널이므로, 안드로이드에 있는 툴체인을 쓰시는게 더 좋습니다.


커널과 rootfs는 다른 툴체인을 사용해도 전혀 문제없습니다.

(실제로 저도 그렇게 많이 사용합니다)



칼마

2018.03.05 18:52:51
*.90.129.149

여러 방법을 해봤는데, 고도리님이 말씀하신 것 처럼 컴파일러를 따로 써야 될 거 같습니다.

 

생각보다 쉬운게 아니네요...


조언 감사드립니다.


다른 분들도 조언해주셔서 감사합니다. 

List of Articles
번호 제목 글쓴이 날짜 조회 수
6348 Hantek 오실로스코프 쓸만 한가요? [4] 김민욱 2019-07-08 404
6347 터미널 창 에서 실행파일 전송하는 방법? [4] 김민욱 2019-07-03 521
6346 락칩 대리점 찾아요... [2] 김민욱 2019-05-24 621
6345 RK3288로 개발을 하는데요. 질문이 있습니다. [7] 김민욱 2019-05-18 345
6344 JNI 에러 발생에 대하여.... [1] 하하호호하하 2019-04-18 343
6343 Web Application Server 또는 Web Server에 대한 질문 [2] SpecialCase 2019-03-28 206
6342 질문만 가끔 드려서 죄송합니다만... [2] 김증일 2018-12-19 255
6341 RISC-V 에 관한 전망 [4] 김민욱 2018-12-04 353
6340 삼성의 SmartThings와 호환가능한 제품을 개발하기 위한 규약에 대한... [3] 테크 2018-09-29 532
6339 Android Framework 관련 교육 아시는분 추천 부탁드려요. [5] whiterub 2018-09-07 459
6338 MCU / AP [6] 김민욱 2018-08-27 8960
6337 안드로이드 루트 권한 관련 문의 [3] 지누 2018-06-26 463
6336 AP 추천 받습니다. [2] 김민욱 2018-05-29 349
6335 임베디드 안드로이드 초보 문의 [2] 지누 2018-05-19 357
6334 [RK3399] FireFly Linux kernel build Error [7] 김민욱 2018-04-19 815
6333 LCD 질문드립니다. file [2] 하하호호하하 2018-04-12 258
6332 툴체인으로 크로스컴 파일 시도때 라이브러리 참조 문제 질문드려요. [7] 노루발 2018-03-22 906
6331 [RK3399] FireFly Android Compile Error [1] 김민욱 2018-03-20 531
» 컴파일 시 libc 와 관련된 골아픈 질문.. [11] 칼마 2018-02-27 3468
6329 [Exynos 8895 chip구매관련] [7] 밥줘잉 2018-02-03 572

사용자 로그인