컴파일 할 때 라이브러리 참조에 관한 문제
안녕하십니까. 모두 건강하신지요. 저는 어제부터 목에....
잡소리 그만하고 질문 올립죠. -_-;;;;
어찌어찌 해서, nano-x 기반의 GUI 프로그램을 짰습니다.
이게 ARM cpu를 쓰는 보드에 올라가기 때문에 , 크로스 컴파일을 했습니다만...
사실, Make에 대해 잘 몰라서, 적당히 다른 선각자께서 만들어 주신 Make를 고쳐 썼습니다.
정확하게 말하면, 고쳐 쓰려고 했습니다.
근데.... 안되더군요.
이게 웃기는게, 컴파일 할 때 에러 나는 게 아니라, 컴파일은 에러없이 다 되는데(waring 도 없습니다. ), 실제로 실행해 보면 참조하는 라이브러리가 arm용으로 컴파일된 라이브러리가 아니라 데스크탑용이 참조된 것 같아요. 왜냐면, 데스크톱에는 마우스랑 키보드가 있는 옵션으로 라이브러리를 컴파일했고, 타겟 보드(=ARM cpu)용으로는 마우스/키보드 없는 옵션으로 라이브러리를 컴파일했거든요.
근데 보드에서 나오는 에러 메시지는 [keyboard initialize error]라서요.
게다가 기본 제공되는 예제 프로그램을 타겟 보드용으로 컴파일한 다음 타겟 보드에서 시험할 때는 돌아가구요...
이런 상황이라면, 어떤 쪽이 문제가 될 가능성이 높을까요???
상황을 정리하면
1. nano-x는 예제 프로그램, 기본 Makefile등을 제공.
2. nano-x자체의 cross complie ->성공
3. 제공되는 예제의 cross complie -> 성공 / 실행 -> 성공
4. 기본 제공이 아닌, 다른 곳에서 얻어온 makefile을 이용한 예제 파일의 cross compile-> 성공 / 실행 -> 실패
5. complie할 때, 에러 메시지 없음 ( -Wall 옵션으로 확인 )
make파일을 같이 올리겠지만... 디렉토리 자체는 전부 arm용 디렉토리로 고친 것 같구요. Makefile을 거쳐서 나온 compile 명령 문장( arm-linux-gcc -I/usr/local/microwindow/..... 등등 )도 전부 맞는 것 같은데...
Make파일을 참고로 올려봅니다.
내용보시면 아시겠지만....간단한 쪽(=용량적은 쪽)이 제가 손 댄 겁니다... -_-;;
고견 기대하겠습니다. 좋은 하루 되시기 바랍니다.
첨부 | 파일 크기 |
---|---|
makes.tar | 20 KB |
x86용과 arm용이 같이 물려서 실행파일은 만든다면링크
x86용과 arm용이 같이 물려서
실행파일은 만든다면
링크 단계에서 에러가 발생합니다.
x86용 바이너리를 물고 들어간 문제는 아닌것 같습니다.
자답입니다.
문제가 해결되었기에 원인을 올립니다.
최초 microwindow를 Make install할 때, 컴파일된 라이브러리들이 /usr/lib에 복사되더군요.
이게 cross complie하면 /usr/arm-linux/lib에 복사되는데요.
어찌 된 영문인지, 최초 make install 은 복사가 되었었는데, 나중에 다시 make install할 때는 복사가 안 되더라구요.
결국 최초의 것만 남아 있게 되어서, 위와 같은 일이 일어났었습니다.
[초코리]님의 말씀대로, 라이브러리 파일 자체는 i386용이 아닌, ARM용이 링크되었으니, 컴파일 할 때 에러가 나지는 않았던 것으로 생각됩니다. (왜 전 이 생각을 못했는지... -_-;;;)
이상입니다. 혹시 저와 비슷한 상황이신 분, 참고가 되시길... -_-;;;
행복하세요!! 그럼 이만!!
댓글 달기